在测试中使用对象列表的最佳实践?

时间:2012-12-26 13:11:43

标签: unit-testing mstest

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

2 个答案:

答案 0 :(得分:0)

对于这种情况,我会使用数据驱动的测试。

查看msdn网站http://msdn.microsoft.com/en-us/library/ms182527.aspx

上的示例

答案 1 :(得分:0)

至少有两种解决方案

将JSON反序列化为域对象

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

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

请参阅完整示例here

优势

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

缺点

  • 跟踪域对象随时间的变化可能非常复杂
  • 不支持架构

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

如果您在测试期间涉及ORM,您可以从根据数据库XSD创建的XML文件load data using NdbUnit到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();
}

请参阅完整示例here

优势

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

缺点

  • 这是集成测试,而不是单元测试
  • XSD通常只包含数据库中的对象
  • 您需要保持XSD最新,并且能够在XSD更改的情况下重新生成XML