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

And*_*w B 0 c# asp.net-mvc integration-testing automated-tests unit-testing

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

在我的测试中,我创建了我的对象(域模型),将它们保存在数据库中,在我的odata控制器的响应中检索由域逻辑过滤的对象,将它们序列化回我的域模型,并将它们与预期的内容进行比较.回.

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

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

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

Pao*_*sta 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);
    }
}
Run Code Online (Sandbox Code Playgroud)