针对内存数据库中的开源测试Oracle SQL查询

时间:2019-06-06 07:21:41

标签: c# oracle automated-tests nunit in-memory-database

我正在使用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运行开源数据库。

1 个答案:

答案 0 :(得分:2)

坦率地说,这对于单元测试没有用;这是一项集成测试,因为从根本上需要合适的服务器。针对完全不同的内存实现进行测试不是有用的测试-它不会告诉您它是否会真正起作用,除非您在某种情况下将内存实现用于实际情况。你的申请。 RDBMS的实现很棘手。

IMO,您应该集中精力以某种可重复的方式在测试环境中运行适当的 actual RDBMS。