为集成测试创建对象(域模型)的最佳通用/自动化方法是什么?

时间:2015-04-18 10:28:45

标签: c# asp.net-mvc unit-testing automated-tests integration-testing

我想为多层应用程序创建易于管理的集成测试,但我遇到了找到一种灵活的方法来创建我的对象的问题。另外,我想保留有时控制对象创建的可能性。

在我的测试中,我创建了我的对象(域模型),将它们保存在数据库中,在我的odata控制器的响应中检索由域逻辑过滤的对象,将它们序列化回我的域模型,并将它们与预计会被退回。

我到目前为止所尝试的是在我的场景中结合FizzWare NBuilder使用Specflow的数据表,但我已经看到维护测试不方便,因为域模型中的任何微小变化都可能导致必须更新集成测试项目的多个区域(在这种情况下,NBuilder对象配置和提供更改模型的数据的每个specflow场景),因为我的应用程序的域模型和逻辑很复杂。

是否有任何通用的自动化方法来实现这一目标?

分享您对此事的知识/经验。

1 个答案:

答案 0 :(得分:6)

我会写评论,但我的声誉不允许我这样做。

查看Autofixture库。它是由Mark Seemann创建的一个开源库,它提供了一种自动创建带有虚假数据的对象的方法,用于测试目的:

https://github.com/AutoFixture/AutoFixture

这是一个非常简单的例子

public class Person
{
    public string FirstName { get; set; }
    public string Lastname { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", FirstName, Lastname);
        }
    }
}

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void FullNameProperlyResolved()
    {
        var fixture = new Fixture();
        var sut = fixture.Create<Person>();
        var expectedFullName = string.Format("{0} {1}", sut.FirstName, sut.Lastname); 
        Assert.AreEqual(expectedFullName, sut.FullName);
    }
}