考虑以下类:
public class test
{
public void start()
{
if (true)
called();
}
internal protected virtual void called()
{
}
}
我想进行if (true)
测试。我最初的想法是使用最小起订量来验证是否called()
被调用。我结束了这个测试:
[TestFixture]
public partial class TestMethodInvocation
{
[Test]
public void TestWithMoqVerify()
{
var mock = new Mock<test>() {CallBase = true};
mock.Object.start();
mock.Verify(t => t.called());
}
}
我在让它工作时遇到了一些麻烦,并发布了这个问题,建议我不要使用 Moq 来模拟测试中的课程。
所以我添加了一个子类,并使用一个属性来测试该方法是否被调用:
public class test2 : test
{
public bool WasCalled { get; set; }
internal protected override void called()
{
WasCalled = true;
}
}
public partial class TestMethodInvocation
{
[Test]
public void TestWithSubclassProperty()
{
var test = new test2();
test.start();
Assert.IsTrue(test.WasCalled);
}
}
这两种方法都有效,但 Moq 实现实际上是测试代码量的一半,因为我不需要创建子类。像这样使用 Moq 是不是很糟糕,或者我应该使用另一个框架来做这种测试?或者这是我的代码设计中出现问题的结果?