生成用于创建具有当前值的对象的代码
本文关键字:对象 代码 用于 创建 | 更新日期: 2023-09-27 18:08:11
我有这样一个场景,我认为这一定是很常见的:
class Parameter
{
public int someInt;
private decimal someDecimal;
public SubParameter subParameter;
}
class SubParameter
{
public string someString { get; set; }
}
在调用以Parameter作为参数的方法时有一个断点。我想写一个单元测试,在这个单元测试中,我用相同的精确值(Parameter对象"tree"的副本)调用这个方法。在这种情况下,编写许多行声明和初始化类的所有字段和属性是非常繁琐的,这些字段和属性本身可能是非原语等。如果我可以右键单击参数变量,然后自动生成代码来创建这样一个对象,那就太好了。
如果在断点处,Parameter对象的值为
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
}
}