我正在使用 NUnit 作为我的测试框架,我想测试对特定测试数据的预言机查询。我想从 nuget 中提取依赖项并运行内存数据库来测试我的查询。我假设我的查询与 sql 兼容,所以我认为我不需要直接针对 oracle 进行测试。
到目前为止,我的搜索导致了这个维基条目,看起来内存数据库中没有合适的内容。
我还发现"Microsoft.EntityFrameworkCore.InMemory"可以用于某些场景,我认为我的不是其中之一。
为了提供一些上下文 - 这是一个会错过数据库的测试实现。
using NUnit.Framework;
using System.Linq;
using System.Collections.Generic;
[TestFixture]
public class ExampleFixture
{
public class JobData { public string Name { get; set; } }
public string queryUnderTest = "select j.name, j.updated from T_JOB j where j.name like '%TEST%'";
[Test]
public void TestQuery()
{
var expected = new[] { new JobData { Name = "-TEST-" } };
var Data = expected.Concat(new[] { new JobData { Name = "OTHER" } });
var dataBase = MakeInMemoryDataBase();
WriteTable(dataBase, "T_JOB", Data);
var actual = QueryAndMakeJobs(dataBase, queryUnderTest);
CollectionAssert.AreEquivalent(expected, actual);
}
private IEnumerable<JobData> QueryAndMakeJobs(object dataBase, string queryUnderTest) => Enumerable.Empty<JobData>();
private void WriteTable(object imdb, string tablename, IEnumerable<JobData> data) {}
private object MakeInMemoryDataBase() => null;
}
我只能使用可以从 nuget.org 中提取的开源依赖项。我唯一的其他选择是从 hub.docker.com 运行开源数据库。
坦率地说,这作为单元测试没有用;它是一个集成测试,因为它从根本上需要适当的服务器。针对完全不同的内存中实现对其进行测试不是一个有用的测试 - 它不会告诉您它是否实际有效,除非您在应用程序中的某些场景中实际使用该内存中实现。RDBMS的实现很敏感。
IMO 您应该专注于以某种可重现的方式在您的测试环境中运行适当的实际 RDBMS。