我正在为类方法“Execute”执行单元测试,但不想执行类构造函数代码。
有没有办法从单元测试执行中跳过构造函数代码调用?
类代码,
public class DemoCls
{
public DemoCls()
{
string ConfigFolderPath = Path.Combine(Environment.CurrentDirectory, @"\Config");
//string dataFolder = @"C:\Data1";
foreach (string X in Directory.EnumerateFiles(ConfigFolderPath, "test" + "*.xml"))
{
}
}
public void Execute()
{
}
}
单元测试代码,
[TestClass()]
public class DemoClsTests
{
[TestMethod()]
public void ExecuteTest()
{
var X = new DemoCls();
X.Execute();
}
}
答案 0 :(得分:5)
重写课程,有两种方法之一:
使用接口将信息传递给构造函数(可以在单元测试中模拟)
cadvisor
从构造函数中删除配置代码,并将其放在另一个函数中。
cadvisor2
接口更适合单元测试。
答案 1 :(得分:3)
"有没有办法从单元测试执行中跳过构造函数代码调用?"
答案是:否(例如方法)
答案 2 :(得分:0)
您可以将ctor代码包装在“if”预处理程序指令中,并仅在非测试运行期间有条件地执行它。
#define DEBUG
// ...
#if DEBUG
Console.WriteLine("Debug version");
#endif
见
答案 3 :(得分:0)
你可以使用单元测试框架,它允许你模拟具体的类,以便伪造没有接口的类,例如我使用Typemock Isolator,我可以模拟几乎任何类,并决定什么是发生在所有班级成员及其构造者身上。 这是对您在问题中所使用的课程的测试:
[TestMethod,Isolated]
public void TestMethod()
{
var fake = Isolate.Fake.Instance<DemoCls>(Members.CallOriginal, ConstructorWillBe.Ignored);
fake.Execute();
Isolate.Verify.WasCalledWithAnyArguments(() => fake.Execute());
}