为什么ExpectConstructor()不会导致此测试失败?

时间:2009-03-31 22:41:02

标签: c# unit-testing mocking nunit typemock

我对TypeMock 3.5中ExpectConstructor()类的Mock方法的目的感到有些困惑。

我原以为如果没有调用构造函数,调用ExpectConstructor会导致MockManager失败Verify(),即如果没有实例化模拟类型的实例。< / p>

但是,调用ExpectConstructor()而不指定该构造函数的任何参数似乎不会设置该期望 - 因此我的测试无论如何都会通过。

我的问题:我错过了什么或误解了什么?如果ExpectConstructor()不是用于验证构造函数调用,那么它的用途是什么?

考虑这三个说明问题的NUnit测试:

[Test]
public void exampleTest1()
{
   MockManager.Init();
   Mock fooMock = MockManager.Mock(typeof(Foo));
   fooMock.ExpectConstructor().Args(10);

   Foo f = new Foo(10);   // Constructor called
   MockManager.Verify();  

   // This test passes, as expected...so far so good
}

[Test]
public void exampleTest2()
{
   MockManager.Init();
   Mock fooMock = MockManager.Mock(typeof(Foo));
   fooMock.ExpectConstructor();

   Foo f = new Foo();  // Constructor called
   MockManager.Verify();  

   // This test passes...also as expected
}

[Test]
public void exampleTest3()
{
   MockManager.Init();
   Mock fooMock = MockManager.Mock(typeof(Foo));
   fooMock.ExpectConstructor();

   // nb. not instantiating an instance of Foo

   MockManager.Verify();  

   // This test passes - why?!
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这被报告为错误back in 2006。据说它将被修复(好吧,实施 - 显然它不是一个bug,它只是一个未实现的功能......)但如果现在仍然是一个问题,我猜他们没有得到它:(