【发布时间】:2016-02-29 00:43:18
【问题描述】:
如何创建部分使用数据库单元测试但从常规单元测试调用的单元测试?
是的,也许它们可能不是单元测试;您可能希望将它们称为集成测试。不管你想给它们贴什么标签,它们都是测试。
在我的 nunit 测试中,我使用了辅助常量:
private const string NumericSerial="123123";
private const string NonNumericSerial="123123 bad serialnumber";
private const int ValidPatientId=123;
private const int InvalidPatientId=-1;
private const int PatientIdThatDoesNotExistInppp=111291;
private const string SerialNumberThatDoesNotExistInshmk="123123";
private const string SerialNumberThatDoesExistInshmk="1015873";
private const byte InvalidFirmwareVersion=0;
private const int FacilityThatDoesntExistInAAA=Int32.MaxValue;
在运行任何使用这些常量的测试之前,我想验证这些常量是否正确定义。
例如,我可以断言 NumericSerial 确实是数字,而无需对任何依赖项进行任何模拟或注入 - 我只需 tryparse 它。
但是,其他常量,例如 PatientIdThatDoesNotExistInppp 需要验证它在 ppp 数据库中确实不存在。为了做到这一点,我可以遵循几条路线:
- 在实体框架内实现 linq 查询
- 向数据库显式发送一条选择语句
- 或者我可以通过首先创建必要的记录来进行数据库单元测试(在我们的例子中,它将确保数据库中不存在 111291。
除非您强烈反对选项 #3,否则我倾向于实施该选项。 如何创建部分使用数据库单元测试但从常规单元测试调用的单元测试?
我正在寻找类似以下的内容:
[Test]
public response_from_database_unit_test_equals_111291()
{
//call the database unit test
//retrieve value from database unit test
}
【问题讨论】:
-
您是否首先使用实体框架代码作为您的数据访问层,而根本没有存储过程?如果是,那么有一种绝妙的方法来进行数据测试,无需访问数据库,但数据层具有 100% 的可靠性。让我知道。
-
我不喜欢听听如何以这种方式进行
-
通过“这种方式”我假设你的意思是你的问题,所以我已经回答了
-
我的意思是通过 EF,但请随时做出单独的回答
-
我不知道我真的在为此苦苦挣扎:drive.google.com/file/d/0ByqKtGmtuLzZUGVNVkdVaDYzOGc/…
标签: c# visual-studio unit-testing visual-studio-2015 nunit