C# 生成用于创建具有当前值的对象的代码
我有这样一种情况,我认为这一定很常见:C# 生成用于创建具有当前值的对象的代码,c#,unit-testing,debugging,code-generation,C#,Unit Testing,Debugging,Code Generation,我有这样一种情况,我认为这一定很常见: class Parameter { public int someInt; private decimal someDecimal; public SubParameter subParameter; } class SubParameter { public string someString { get; set; } } 我在调用将参数作为参数的方法时有一个断点。我想写一个单元测试,在这里我用相同的精确值调用这个方法(参数对象“t
class Parameter
{
public int someInt;
private decimal someDecimal;
public SubParameter subParameter;
}
class SubParameter
{
public string someString { get; set; }
}
我在调用将参数作为参数的方法时有一个断点。我想写一个单元测试,在这里我用相同的精确值调用这个方法(参数对象“tree”的副本)。
在这种情况下,编写许多行来声明和初始化类的所有字段和属性是非常繁琐的,这些字段和属性本身可能是非原语的。
如果我可以右键单击参数变量,然后自动生成代码来创建这样一个对象,那就太好了
因此,如果在断点处,参数对象具有
Parameter parameter = new Parameter
{
someInt = 42,
someDecimal = 42.42m,
subParameter = new SubParameter { someString = "42" }
};
那么,代码就会生成。然后,我可以使用生成的代码进行单元测试
这样的事情存在吗
编辑: 我想我一直不清楚。我非常清楚如何亲手编写代码 我想要的是,当我碰到一个断点并观察一个复杂变量(或任何变量)时,我希望能够说:为我生成代码,创建这个变量的克隆。我将使用生成的代码进行单元测试
是否存在这样的工具?只需创建一个帮助器方法即可为您创建参数:
public void CreateParameter()
{
return new Parameter
{
someInt = 42,
someDecimal = 42.42m,
subParameter = new SubParameter { someString = "42" }
};
}
样本使用
[TestMethod]
public void MyTest()
{
SomeClass.MethodBeingTested(CreateParameter());
}
如果希望具有特定的参数值,请修改返回的参数或提供允许您提供该值的重载:
[TestMethod]
public void MyTest()
{
Parameter parameter = CreateParameter();
parameter.someInt = 23;
SomeClass.MethodBeingTested(parameter);
}
我通常让我的
CreateParameter
使用随机值填充参数,以减少单元测试碰巧通过某些值的“偶然”测试,但其他值的测试将失败的可能性。您可以使用TestInitialize来初始化测试方法:
[TestClass]
public class UnitTest1
{
Parameter _parameter = null;
[TestInitialize]
public void Initialize()
{
_parameter = new Parameter
{
someInt = 42,
someDecimal = 42.42m,
subParameter = new SubParameter { someString = "42" }
};
}
[TestCleanup]
public void Cleanup()
{
_parameter = null;
}
[TestMethod]
public void MyTest1()
{
// test _parameter
}
[TestMethod]
public void MyTest2()
{
// test _parameter
}
}