8

我最近开始使用 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();    

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

4

1 回答 1

5

在微不足道的情况下,您是正确的-没有实质性区别。

但是,SUT API 封装有其用途——因为您的 System Under Test 及其Fixture Object比具有默认 ctor 的东西更有趣(它真的没有依赖关系吗?),例如:

  • MyClass需要将东西输入到它的构造函数中
  • `MyClass 具有您不希望应用默认值的读/写属性(巧合编程)
  • 的建设MyClass还有其他您想应用政策的东西

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

编辑:出于某种原因,@Brad Wilson 认为适合转发这篇有点突出的文章

于 2011-05-31T16:02:52.983 回答