用于生成c#类初始化的工具

时间:2014-04-03 12:05:22

标签: c# unit-testing testing code-generation

编写单元测试我的任务很无聊。所以我需要创建虚假数据。

我可以自动执行此过程吗? 例如,从数据库中获取数据并根据类实例生成c#代码。 或者只是从json \任何其他格式的文件中获取数据。

1 个答案:

答案 0 :(得分:1)

我个人不知道在.net上从数据库生成数据的任何工具。可以帮助您为测试创建数据的过程可以帮助您实现工厂帮助,例如PlantFactoryGirl.NET

我目前在项目中使用Plant并且对我来说效果很好。

植物使用

要创建新工厂,您通常需要告诉它要查找蓝图的装配。你可以通过

来做到这一点
var plant = new BasePlant().WithBlueprintsFromAssemblyOf<PersonBlueprint>();

其中PersonBlueprint是您定义的蓝图之一。然后,Plant将从该程序集中实现Blueprint接口的任何其他类型加载蓝图。

检索对象的默认实例

var person = plant.Create<Person>();

检索具有覆盖默认蓝图的特定部分的人员实例

var person = plant.Create<Person>(new 
{ 
    EmailAddress = "john@doe.com" 
});

可以在一次调用中覆盖多个属性

var person = plant.Create<Person>(new 
{ 
    EmailAddress = "john@doe.com", 
    State = "GA" 
});

要定义一个懒惰计算的Blueprint属性,但是使用序列计数器,将值设置为new Sequence(lambda),如下所示:

class PersonBlueprint : Blueprint
{
    public void SetupPlant(BasePlant plant)
    {
        plant.DefinePropertiesOf<Person>(new
        {
          ID = new Sequence<int>((sequenceValue) => sequenceValue)
          Name = new Sequence<string>((sequenceValue) => "test: " + sequenceValue)
        });
    }
}   

FactoryGirl.NET用法

定义工厂:

FactoryGirl.Define(() => new User 
{
    FirstName = "John",
    LastName = "Doe",
    Admin = false
});

使用工厂:

var user = FactoryGirl.Build<User>();

自定义正在构建的对象:

var admin = FactoryGirl.Build<User>(x => x.Admin = true);