【发布时间】:2020-03-29 20:39:39
【问题描述】:
我们已经开始引入一些行为测试来尝试测试一些外部软件模块,例如一个完整的黑盒。 该测试套件是使用从基测试类继承来编写的,以便于组织。
现在我们想重用这个测试套件来测试另一个接口兼容的模块。 我们能够找到的解决方案是继承测试类,并实现另一个构造函数。 我想确认没有更好的选择,因为为每个测试套件类编写重复的继承类似乎是错误的。
[TestClass]
public class RouModel_Basic_RunnerBasic : ROUModelTest_Basic
{
public RouModel_Basic_RunnerBasic() : base()
{
//init basic model here
model = basicModel;
}
}
[TestClass]
public class RouModel_Basic_RunnerOther : ROUModelTest_Basic
{
public RouModel_Basic_RunnerOther() : base()
{
//init other model here
model = otherModel;
}
}
public class ROUModelTest_Basic : RouModelTest
{
[TestMethod]
public void TestABC()
{
string input = "abc"
var result = model.run(input);
Assert.AreEqual("123", result);
}
}
public class RouModelTest
{
protected IModelTest model;
...
}
【问题讨论】:
-
我们以前曾使用带有虚拟成员的基类或额外的 Func 用于通用测试初始化、拆卸等,这有助于将通用逻辑隔离到基类。请说明您是否尝试重用代码来测试业务功能或交叉关注
-
@Saravanan 我不完全理解你的问题。我们使用这个测试套件来验证模块是否按照规范工作。并且想要验证另一个模块是否符合相同的规范
-
那么
TestABC方法使用的是在每个构造函数中创建的模型? -
@weichch 我已经阐明了我的代码示例,以展示模型在测试套件中的使用方式。
-
在您的情况下,您可以在基本方法中使用工作流,但是,确实有单独的功能,以便您可以动态更改输入,使用 Func 属性编写其他方法来测试您的代码以适应各种测试用例。例如:您可以在 TestABC 方法中拥有像
protected Func<IModel, boolean> PreProcessor = null;这样的属性,您可以检查 Preprocessor 是否不为空,如果是,则调用它或继续基本方法流程。这为您提供了更多选项来自定义代码以轻松适应多种场景。
标签: c# unit-testing mstest