我最近开始使用 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
建筑还有什么想要的apply a policy to 那么拥有一个Sut Factory的力量参与开始发挥作用,让无关代码消失,并允许您将横切关注点应用于流程。
编辑:出于某种原因 @Brad Wilson saw fit to repost this article这有点突出
关于unit-testing - 在 AutoFixture 中为被测类创建匿名类型的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6187387/