【发布时间】:2016-02-12 00:24:07
【问题描述】:
有时在我的测试中,我需要执行不同的 Setup() 调用,为每次测试运行设置不同的 Mocks - 如下所示:
private void Setup(bool isTrue)
{
mock.Setup(x => x.DisplayNames).Returns(new Dictionary<int, string>());
// ...
// 5x more of these are the same for all tests
if (isTrue)
mock.Setup(x => x.DisplayOld).Returns(isTrue);
// 5x more of these parameterlized setups
...
}
现在,在我的每个单元测试中,我都会调用 Setup(true/false)。
由于单元测试是并行运行的(默认为 xUnit),这会导致任何锁定问题吗? (假设两个测试同时调用 Setup())。
如果是这样的话:
- 如何纠正这种情况?
- 如果一个人想要一个方法(如 setup())并传递一个参数 - 用于不同的模拟场景,那么正确的方法是什么?
【问题讨论】:
-
如果您的
Setup方法被您的单元测试框架自动调用,那么是的,您会遇到问题。如果它实际上是由您的测试调用的,那么它应该没问题,假设 A)模拟对象没有被静态存储(例如,在对象工厂中),并且 B)模拟对象不是使用共享功能设置的(例如:.Returns(myDictionarySharedBetweenTests). -
Rob,你能澄清一下吗?是的,我从我的每个测试 [Fact] 方法中调用 setup()。这是一个简单的设置,就像上面的代码一样 - 没有共享任何内容。基于 bool 标志的不同设置场景例如:mock.Setup(x => x.DoSomething).Returns(true) / false 等。
标签: c# .net unit-testing