c# - 在单元测试中尝试捕获依赖项?
问题描述
我对单元测试比较陌生,但我想开始对旧版 ASP NET MVC 应用程序进行单元测试。例如,我有函数 PrepareModel 可以做很多事情并且有多个依赖项。我在我的模型中添加了 newFeature 并创建了 myNewCode,以获取此功能。
public Model PrepareModel(){
Model model = new Model();
model.mainPropertie = getFromDataBase();
model.someIrrelevantProperty1 = getValueFromSomeDependency();
model.someIrrelevantProperty2 = getValueFromSomeDependency();
model.newFeature = myNewCode();
return model;
}
我想对正确获得 model.newFeature 的 PrepareModel() 进行单元测试。
我成功地模拟了数据库,但有很多不相关的依赖项。我没有太多时间来重构它们。
添加 try-catch 环绕与测试无关的功能是否可以接受? 也许将来我会在此功能中有下一个任务时将它们重构出来。
public static bool isTest { get; set; }
public Model PrepareModel(){
Model model = new Model();
model.mainPropertie = getFromDataBase();
try{
model.someIrrelevantProperty1 = getValueFromSomeDependency();
model.someIrrelevantProperty2 = getValueFromSomeDependency();
}
catch(Exception ex) {
if (!isTest)
throw ex;
}
model.newFeature = myNewCode();
return model;
}
如果这不可接受,我该怎么办?
解决方案
有更好的方法来做到这一点。看,你已经isTest
公开了你的变量——这很危险。该问题的更好解决方案是在您的解决方案中创建新配置并将其称为 TEST。接下来在您的测试应用程序中,只需将 TEST 添加到定义中。在您的代码中:
public Model PrepareModel(){
Model model = new Model();
model.mainPropertie = getFromDataBase();
#if !TEST
model.someIrrelevantProperty1 = getValueFromSomeDependency();
model.someIrrelevantProperty2 = getValueFromSomeDependency();
#endif
model.newFeature = myNewCode();
return model;
}
当然,这假设测试只能在 TEST 配置中运行*
如果您不知道我所说的“配置”是什么意思,那只是 DEBUG 和 RELEASE 之外的另一个。
推荐阅读
- excel - 使用 VBA 从日志文件或文本文档中提取两个字符串(时间间隔)之间的数据
- github - 如何获取 github 版本的 rss 提要,只有最新版本,不包括预发布?
- node.js - NodeJS 中带有 fromEvent 可观察对象和 Typescript 的 Socket.io
- angular - 将 Observable 值设置为可导出变量。角度 v6
- sql - 关于如何在 Oracle Express - SQL 中创建。更新列的触发器
- python-3.x - 如何修复 numpy python 3(矩阵乘法)中的“TypeError:当前不支持对象数组”错误
- node.js - 节点 - 递归搜索依赖关系
- java - 未发送 POST 请求
- javascript - 脚本标签 shopify 缺少参数错误
- amazon-ec2 - 无法在 AWS EB 中将私钥作为环境变量传递