1

我正在使用 MSTest 在我们的应用程序中改进单元测试。我们的许多测试将使用通常来自我们数据库的对象(类)的模拟列表。我想将此列表保存在测试项目中,然后根据需要为每个需要它的测试阅读该列表。是否有这样做的最佳实践?顺便说一句,这些列表可能包含数百或数千个项目。

4

2 回答 2

0

至少有两种解决方案

将 JSON 反序列化为域对象

使用库Json.Net,您可以将包含 JSON 的文本文件反序列化为对象层次结构

var hierarchy = JsonConvert.DeserializeObject<Root>(testJson)

在此处查看完整示例

好处

  • 易于编辑
  • 支持复杂的层次结构
  • 测试数据可以存储在单独的文本文件中

缺点

  • 随着时间的推移跟踪域对象的更改可能非常复杂
  • 不支持架构

NDbUnit 是一个 .NET 库,用于在测试期间管理数据库状态

如果您在测试期间涉及 ORM,您可以使用 NdbUnit从根据数据库 XSD 创建的 XML 文件将数据加载到 SQLite

SQLiteConnection connection = boundSession.GetConnection();

using (var cmd = new SQLiteCommand("PRAGMA foreign_keys = OFF", connection))
{
    cmd.ExecuteNonQuery();
}

var sqlLiteUnitTest = new SqlLiteDbUnitTest(connection);

sqlLiteUnitTest.ReadXmlSchema(xsdFile);
sqlLiteUnitTest.ReadXml(xmlDataFile);
sqlLiteUnitTest.PerformDbOperation(DbOperationFlag.CleanInsertIdentity);

using (var cmd = new SQLiteCommand("PRAGMA foreign_keys = ON", (SQLiteConnection)connection))
{
    cmd.ExecuteNonQuery();
}

在此处查看完整示例

好处

  • 由于 XSD,很容易处理大量数据
  • 适用于复杂的集成测试套件并支持不同的 SQL 引擎

缺点

  • 这是集成测试,而不是单元测试
  • XSD 通常只包含数据库中的对象
  • 您需要使 XSD 保持最新,并且能够在 XSD 更改的情况下重新生成 XML
于 2013-01-08T13:48:57.533 回答
0
于 2012-12-26T22:23:01.023 回答