【发布时间】:2013-05-09 06:11:02
【问题描述】:
目前,我正在使用定制的假对象,在幕后使用 NSubstitute 来创建实际对象,但随着项目的发展,它变得非常难以维护,所以我正在尝试寻找替代品,我希望AutoFixture 是适合这项工作的工具。
我阅读了文档,但我很苦恼,因为文档很少甚至没有,我阅读了 Mark Seemann 的大部分博客文章,包括 CheatSheet。
我很难掌握的一件事是如何使用具有参数的构造函数创建对象,在我的情况下,我需要将参数传递给 CsEmbeddedRazorViewEngine 以及将 HttpRequestBase 传递给 ControllerContext。
我看到它的方式是我需要创建一个假对象,最后创建一个将它们注入到的自定义对象
我还研究了 NBuilder,在那里传递参数似乎稍微简单一些,但我听说过关于 AutoFixture 的好消息,我想试一试。 :)
我正在尝试减少我拥有的假对象的数量,所以这是一个真正的测试,我怎样才能用 AutoFixture 做同样的事情?
[Theory,
InlineData("en-US"),
InlineData("en-us"),
InlineData("en")]
public void Should_return_the_default_path_of_the_view_for_enUS(string language)
{
// Arrange
const string EXPECTED_VIEW_PATH = "~/MyAssemblyName/Views/Home/Index.cshtml";
CsEmbeddedRazorViewEngine engine = CsEmbeddedRazorViewEngineFactory.Create(ASSEMBLY_NAME, VIEW_PATH, string.Empty);
string[] userLanguage = { language };
HttpRequestBase request = FakeHttpRequestFactory.Create(userLanguage);
ControllerContext controllerContext = FakeControllerContextFactory.Create(request);
// Act
ViewEngineResult result = engine.FindPartialView(controllerContext, VIEW_NAME, false);
// Assert
RazorView razorView = (RazorView)result.View;
string actualViewPath = razorView.ViewPath;
actualViewPath.Should().Be(EXPECTED_VIEW_PATH);
}
附:我使用 xUnit 作为我的测试框架和 NSubstitute 作为我的模拟框架我应该安装 AutoFixture.Xunit 和 AutoFixture.AutoNSubstitute 吗?
更新:在对它了解得越来越多之后,我想它不是适合这项工作的工具,因为我试图用 AutoFixture 代替我的测试替身工厂,而不是用它来设置我的 SUT。
由于奇怪的原因,我认为 NBuilder 正在做同样的事情,据我所知,它们是非常不同的工具。
所以经过一番思考,我想我会去改变我在我的测试替身工厂中使用的方法到对象,然后使用 AutoFixture 创建我的 SUT 并将我的测试替身注入到它。
【问题讨论】:
标签: autofixture