MsTest :每次测试方法运行时实际值都会增加

这是我的测试课


[TestClass]

public class FooServiceTest

{

    private IYourRepository _yourRepository;


    [TestInitialize]

    public void Initialize()

    {

        _yourRepository = new Mock<YourRepository>().Object;


    }


    [TestMethod]

    public void GetPushableEntries_gets_all_pushable_entries()

    {

        var yourObjectList = new List<YourObject>

        {

            new WaitingQueue

            {                   

                ProfileId = 26,

                IsDeleted = false,

                Pushable = true

            },

            new WaitingQueue

            {                    

                ProfileId = 27,

                IsDeleted = false,

                Pushable = true

            },

            new WaitingQueue

            {                   

                ProfileId = 28,

                IsDeleted = false,

                Pushable = false

            }


        };


        foreach (var yourObject in yourObjectList)

        {

            _yourRepository.Create(yourObject);

        }


        var pushableEntries = _yourRepository.GetList(x => x.Pushable);

        pushableEntries.Count.ShouldEqual(2);

        pushableEntries.ShouldNotBeNull();

        pushableEntries.ShouldBe<IReadOnlyCollection<WaitingQueue>>();


    }


}

这是ShouldEqual方法


public static T ShouldEqual<T>(this T actual, object expected)

{

    Assert.AreEqual(expected, actual);

    return actual;

}

这是GetList方法


public IReadOnlyCollection<T> GetList(Expression<Func<T, bool>> @where, params Expression<Func<T, object>>[] nav)

{

    using (var dbContext = new MyDbContext())

    {

        return GetFiltered(dbContext, nav).Where(where).ToList();

    }

}

每次我运行GetPushableQueues_gets_all_pushable_entries()方法


实际值增加2。


Assert.AreEqual failed. Expected:<2>. Actual:<2>. //first run

Assert.AreEqual failed. Expected:<2>. Actual:<4>. //second run

Assert.AreEqual failed. Expected:<2>. Actual:<6>. //third run

即使我清理测试项目并重建它,这个问题仍然存在。知道为什么会发生这种情况以及我错过了什么吗?


注意:还有其他测试方法使用_yourRepository和调用Create方法来创建实体。


慕盖茨4494581
浏览 179回答 1
1回答

HUWWW

问题是您实际上在那里使用某种存储库。你不要嘲笑它。_yourRepository = new Mock<YourRepository>().Object;应该是 _yourRepository = new Mock< IYourRepository >().Object;并且您从 IYourRepository 接口使用的所有方法也应该被模拟/设置。
打开App,查看更多内容
随时随地看视频慕课网APP