为测试中的类创建AutoFixture中的匿名类型的目的是什么?

时间:2011-05-31 12:12:10

标签: unit-testing c#-4.0 autofixture

我最近开始使用AutoFixture库(http://autofixture.codeplex.com/)进行单元测试,我非常喜欢它。

我从AutoFixture CodePlex网站获得了此代码示例。我的问题是关于第8行。

1.   [TestMethod]
2.   public void IntroductoryTest()
3.   {
4.        // Fixture setup
5.        Fixture fixture = new Fixture();
6.
7.        int expectedNumber = fixture.CreateAnonymous<int>();
8.        MyClass sut = fixture.CreateAnonymous<MyClass>();
9.        
10.        // Exercise system
11.        int result = sut.Echo(expectedNumber);
12.        
13.        // Verify outcome
14.        Assert.AreEqual<int>(expectedNumber, result, "Echo");
15.        // Teardown
16.    }

我无法理解,为什么我们需要创建一个被测试类的匿名对象。

        MyClass sut = fixture.CreateAnonymous<MyClass>();

该类应该是真正的IMO对象。举个例子..

        var sut = new MyClass();    

我的问题是,创建一个匿名对象进行测试的真正好处是什么?

1 个答案:

答案 0 :(得分:4)

在琐碎的情况下,你是对的 - 没有实质性的区别。

然而,SUT API Encapsulation有其用途 - 因为您的系统测试及其Fixture Object比使用默认ctor的东西更有趣(它真的有没有依赖性?),例如:

  • MyClass要求将内容输入其构造函数
  • `MyClass具有您不希望应用默认值的读/写属性(巧合编程)
  • MyClass的结果包含您想要的任何其他内容apply a policy to

然后让Sut Factory参与的力量开始发挥作用,让无关的代码消失,并允许您对流程应用横切关注点。

编辑:出于某种原因,@Brad Wilson saw fit to repost this article有点突出