unit-testing - 在 AutoFixture 中为被测类创建匿名类型的目的是什么?

标签 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();    

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

最佳答案

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

然而,SUT API Encapsulation有它的用途——作为您的被测系统及其 Fixture Object s 比使用默认 ctor 的东西更有趣(它真的没有依赖关系吗?),例如:

  • MyClass需要将东西输入到它的构造函数中
  • `MyClass 具有您不希望应用默认值的读/写属性(巧合编程)
  • MyClass建筑还有什么想要的apply a policy to

  • 那么拥有一个Sut Factory的力量参与开始发挥作用,让无关代码消失,并允许您将横切关注点应用于流程。

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

    关于unit-testing - 在 AutoFixture 中为被测类创建匿名类型的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6187387/

    相关文章:

    django - django测试框架是否支持多个数据库?

    c# - Linq 表达式获取插入的 Convert 函数

    c# - AutoFixture - 相似度。复杂对象的比较

    c#-4.0 - C# 4.0 中 Box 的身份验证

    asp.net - 如何使用主页在事件菜单项上设置 css 类?

    autofixture - 列表中项目的单元测试顺序

    c# - 如何告诉 Autofixture 创建具有不同 ID 的对象?

    java - 使用 Mockito thenCallRealMethod 时出现 NullPointerException

    ios - 在 XCode 中组织 iOS OCUnit 测试文件

    python - 如何禁止猴子修补不存在的模拟方法?