代码之家  ›  专栏  ›  技术社区  ›  razlebe

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

  •  1
  • razlebe  · 技术社区  · 15 年前

    我有点搞不清楚这个计划的目的 ExpectConstructor() 关于 Mock

    ExpectConstructor 会导致 MockManager Verify() 如果未调用构造函数,即如果未实例化模拟类型的实例。

    ExpectConstructor() 如果不为该构造函数指定任何参数,则似乎不会设置该期望值,因此我的测试无论如何都会通过。

    我的问题:我是否遗漏或误解了什么?如果 不是用来验证构造函数调用的,它是用来做什么的?

    考虑这三个NUnt测试来说明问题:

    [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 回复  |  直到 13 年前
        1
  •  2
  •   Jon Skeet    15 年前

    这被报告为一个bug back in 2006 . 据推测,它将被修复(好吧,实现-显然这不是一个bug,它只是一个未实现的特性…),但如果它现在仍然是一个问题,我猜他们没有考虑它:(