我正在使用NUnit作为测试框架,并且我想在特定测试数据上测试oracle查询。我想从nuget中提取一个依赖项并运行一个内存数据库来测试我的查询。 我假设我的查询与sql兼容,所以我认为不需要直接针对oracle进行测试。
到目前为止,我的搜索结果显示此wiki entry似乎没有合适的内存数据库。
我还发现“ 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运行开源数据库。
答案 0 :(得分:2)
坦率地说,这对于单元测试没有用;这是一项集成测试,因为从根本上需要合适的服务器。针对完全不同的内存实现进行测试不是有用的测试-它不会告诉您它是否会真正起作用,除非您在某种情况下将内存实现用于实际情况。你的申请。 RDBMS的实现很棘手。
IMO,您应该集中精力以某种可重复的方式在测试环境中运行适当的 actual RDBMS。