c# - 通过访问数据库来测试 Entity Framework 数据

标签 c# asp.net unit-testing entity-framework tdd

我正在尝试通过实际访问数据库来测试我的真实数据。我实际上正在测试我的存储库类。这是我正在做的一个例子;

/// <summary>
/// Summary description for Country
/// </summary>
[TestClass]
public class Country {

    public Country() {
        _countryRepo = new CountryRepository();
    }

    private ICountryRepository _countryRepo;

    [TestMethod]
    public void db_should_return_at_least_one_country_as_approved_all() {

        //Act
        var model = _countryRepo.GetAll();

        //Assert
        Assert.IsTrue(model.Count() >= 1);
    }

    [TestMethod]
    public void db_should_return_at_least_one_country_as_approved_true() { 

        //Act
        var model = _countryRepo.GetAll(ApprovalStatus.Approved);

        //Assert
        Assert.IsTrue(model.Count() >= 1);
    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_id() {

        //Act
        var model = _countryRepo.GetSingle(1000);

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_countryISO3166Code() {

        //Act
        var model = _countryRepo.GetSingle("TR");

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

    [TestMethod]
    public void db_should_return_Turkey_as_country_name_by_GUID() {

        //Act
        var model = _countryRepo.GetSingle(Guid.Parse("9AF174A6-D0F7-4393-AAAD-B168BADEDB30"));

        //Assert
        Assert.AreEqual<string>("Turkey", model.CountryName);

    }

}

这很好地满足了我的需求,但我想知道我是否按照书上的要求做对了。我真的应该在这里遵循任何其他模式吗?我不想伪造我的数据,我真正的热情是测试我的 DAL 和实际生产数据。

最佳答案

如果其他人(甚至您)进入您的数据库并创建一个新的批准国家或更改您的国家名称,您的测试将失败。你会想:“我的存储库有问题,为什么它没有按预期工作?”但是,是的,问题不在于存储库。

当我编写访问数据库的测试时,我喜欢创建数据库并在启动时加载默认值,然后销毁,然后就可以了。我不确定这是否是最佳选择,但效果很好。这种方法的问题是速度较慢,而且需要编写更多代码。

关于c# - 通过访问数据库来测试 Entity Framework 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7229498/

相关文章:

c# - 界面模拟上的 Moq CallBase

c# - 在javascript中读取和显示文本文件

c# - 如何从wpf中的文件夹路径获取图像

每个请求执行 4 次的 ASP.NET MVC Controller 操作

asp.net - ASP.NET 按钮周围的虚线边框

unit-testing - 为 TypeScript 中的拖动事件模拟 dataTransfer

.net - 如何在 .net 中调试测试

python - 保护 Nose 免受 Python 解释器崩溃

c# - 如何通过更改同一 ListView 行中下拉列表的项目来更新文本框中的文本

c# - 使用 Linq 将带有嵌套列表的列表转换为单独的列表