【发布时间】:2014-07-07 18:43:07
【问题描述】:
我正在测试许多控制器,每个控制器都依赖于存储库。这就是我在每个测试夹具的情况下提供模拟存储库的方式:
[SetUp]
public void SetUp()
{
var repository = RepositoryMockHelper.MockRepository();
controller = new HomeController(repository.Object);
}
这里是MockRepository 辅助方法,可以很好地衡量:
internal static Mock<IRepository> MockRepository()
{
var repository = new Mock<IRepository>();
var posts = new InMemoryDbSet<Post>()
{
new Post {
...
},
...
};
repository.Setup(db => db.Posts).Returns(posts);
return repository;
}
... = code removed for the sake of brevity.
我的意图是为每个测试使用InMemoryDbSet 的新实例。我认为使用SetUp 属性可以实现这一点,但显然不是。
当我运行所有测试时,结果不一致,因为测试似乎不是孤立的。例如,一个测试将从数据存储中删除一个元素并断言计数已减少,但根据测试运行者的想法,另一个测试可能会增加计数,导致两个测试都失败。
我是否以正确的方式进行这些测试?我该如何解决这个问题?
【问题讨论】:
-
您使用的是哪个测试框架/运行器?
-
好问题。我更新了标签。我正在使用 NUnit。
标签: c# unit-testing mocking tdd nunit