c# - 在 MSTest 中使用继承进行共享测试
问题描述
我正在尝试为 D365 插件和 CodeActivities(都是类)编写单元测试。每个插件都应该运行一些小测试,例如:
[TestMethod]
public void NullLocalPluginContext()
{
XrmFakedContext context = new XrmFakedContext();
Assert.ThrowsException<InvalidPluginExecutionException>(
() => context.ExecutePluginWith<SomePlugin>(null));
}
要测试的类在哪里SomePlugin
(每个孩子不同)并且不能是抽象的(等待IPlugin
)。例如这里它是一个CheckDuplicateOrder
在孩子:
[TestClass]
public class CheckDuplicateOrderTest
{
[TestMethod]
public void NullLocalPluginContext()
{
XrmFakedContext context = new XrmFakedContext();
Assert.ThrowsException<Exception>(
() => context.ExecutePluginWith<CheckDuplicateOrder>(null));
}
}
对于这些小测试,我想让这个父母使用共享测试,但我不知道如何引用“未来”孩子的目标。我更喜欢 MSTest,但任何 NuGet 框架都可以接受。
每个插件都有自己的测试类。每个插件测试类都需要基本的。这些基本测试应该从父级继承(所以它们不占用空间)。
插件:Dog、Cat、Mouse PluginTests:DogTest、CatTest、MouseTest BasePluginTest -> 应该有共享测试,SomePlugin
例如 Dog/Cat/Mouse。但我不知道如何引用它。每个插件都有一个功能TestWalk() { .. ExecutePluginWith<SomePlugin>}
。Cat 应该调用 CatTest,Dog 应该调用 DogTest。
解决方案
与普通类一样,您应该更喜欢组合而不是继承。即使测试类不必遵循与普通类相同的规则和准则,但这并不意味着我们不能实现它们。
因此,当您觉得您的测试类中有一些通用功能时,您应该提取一些测试使用的类。对于普通的商务舱,您也会这样做,不是吗?
class CommonFunc
{
public static bool NullLocalPluginContext<T, TException>() where T: IPlugIn, TException : Exception
{
XrmFakedContext context = new XrmFakedContext();
try { context.ExecutePluginWith<T>(null)) };
catch (T e) { return true; }
return false;
}
}
[TestClass]
public class CheckDuplicateOrderTests
{
[TestMethod]
public void NullLocalPluginContext()
{
Assert.IsTrue(CommonFunc.NullLocalPluginContext<CheckDuplicateOrder, Exception>(null));
}
}
[TestClass]
public class SomeOtherPluginTests
{
[TestMethod]
public void NullLocalPluginContext()
{
Assert.IsTrue(CommonFunc.NullLocalPluginContext<SomePlugin, InvalidPluginExecutionException>(null));
}
}
你也可以让你的通用方法重新抛出异常,而不是仅仅返回true
,或者false
如果你想记录在测试框架中抛出的实际异常。
推荐阅读
- excel - 日期字段混合(日期和文本)格式
- conv-neural-network - 除了取平均值之外,还有其他方法可以整合预测吗?
- php - jquery函数不执行php代码
- python - 计算多标签图像分类的 kappa 分数
- python - Matplotlib - 堆积条形图,底部
- javascript - 如何获得响应的第一个键值
- jquery - 在购物篮页面中编辑数量并使用更新按钮使用 ajax 发回数据
- python-3.x - TensorFlow Serving 队列中的请求数
- mysql - 如何按另一个表(多个表)的顺序从 MySQL 表中的管道中保存 Scrapy 项目?
- c++ - 使用 Clang 插件将不推荐使用的标签添加到声明中