单元测试异步数据库方法

扬·范·布洛姆(Jan van Bloem)

我有一个要使用MS Test进行测试的Web API。我想特别测试一个控制器。这是初始化代码:

public class MyControllerTests
{
    private static MyController controller;

    [AssemblyInitialize]
    public static void Initialize(TestContext context)
    {
        controller = new MyController();

        IoC.Register(Component.For<IDbContextFactory>().ImplementedBy<MockDbContextFactory>());
        // other config
    }
    // test methods, all async
}

这是模拟上下文工厂。是否在所有API方法中使用它来获取数据库上下文。

public class MockDbContextFactory : IDbContextFactory
{
    MyContext context;

    public MyBaseContext GetContext()
    {
        if (context == null)
        {
            context = new MyContext(new DropCreateDatabaseAlways<MyContext>());

            //populate with mock data...
        }

        return context;
    }
}

一切都很好,直到我为delete方法添加了测试。它在其他方法之前完成,因此它从共享上下文中删除对象,其他测试失败。不,我有两个想法:每个方法都有新的上下文(使用[TestInitialize]重置程序),但是底层数据库仍然相同,并且在插入新的模拟对象时遇到很多键冲突。另一个想法是在内存中设置一个新数据库,并具有完全独立的实例。我找到了Effort,但是我认为这是一个过大的杀伤力,我正在错误地解决它。

我使用Castle Windsor作为IoC容器,以防万一有办法在IoC级别上做到这一点。

克莱斯

我认为您可能会以错误的方式看待这个问题。

单元测试的目的是测试与任何其他单元隔离的功能单元。无需对单元测试实体框架进行全面测试。每当您创建CRUD操作的测试时,实际上就是在创建集成测试,而不是单元测试。

如果您确实需要测试CRUD操作,那么模拟工厂应该只是返回传递给它的所有操作的成功,或者在本地保存数据以返回进行验证。它不应该创建一个“测试” DbContext对象,该对象不仅必须与数据库进行交互,而且还必须与您的其他测试进行交互。您的单元测试应仅专注于验证被测函数中的操作。

现在,如果您打算执行集成测试,那么通常的做法是让测试本身插入要删除的对象。让删除测试尝试删除由另一个测试插入的记录始终会给计时带来挑战。另外,您甚至没有理由担心使用删除插入测试插入的对象DropCreateDatabaseAlways

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

连接到数据库的单元测试异步功能

来自分类Dev

涉及数据库的单元测试

来自分类Dev

从数据库返回单元测试和数据

来自分类Dev

JDBC /数据库单元测试的最佳实践

来自分类Dev

用于数据库服务的AngularJS单元测试

来自分类Dev

如何对Django数据库迁移进行单元测试?

来自分类Dev

如何对Django数据库迁移进行单元测试?

来自分类Dev

单元测试数据库调用

来自分类Dev

rspec rails:单元测试数据库查询

来自分类Dev

如何对具有数据库访问权限的方法进行单元测试?

来自分类Dev

如何对使用数据库访问的静态方法进行单元测试?

来自分类Dev

如何对将项目添加到数据库的方法进行单元测试?

来自分类Dev

与数据库交互而不在数据库中创建数据的单元测试代码

来自分类Dev

在单元测试之间恢复数据库:数据库仍在使用中

来自分类Dev

当数据库架构和实体更改时,单元测试失败,但单元测试未更改

来自分类Dev

如何在Laravel 4单元测试中的setupBeforeClass方法中为数据库设置种子?

来自分类Dev

Django单元测试需要很长时间才能创建测试数据库

来自分类Dev

symfony中的单元测试实体何时使用测试数据库?

来自分类Dev

用于单元测试的核心数据临时数据库

来自分类Dev

单元测试检查数据库查询是否正确–可以嘲笑什么?

来自分类Dev

使用Spock和Robospock进行单元测试以创建SQLite数据库

来自分类Dev

需要空数据库的实体框架代码第一个单元测试

来自分类Dev

Visual Studio 2013:单元测试SQL Server数据库项目时模拟存储过程

来自分类Dev

使用Spring + JPA但没有数据库可用的单元测试Service Bean

来自分类Dev

我应该使用数据库模拟进行单元测试吗

来自分类Dev

基于angularjs单元测试承诺的服务(SQlite数据库服务)

来自分类Dev

如何使用Oracle作为嵌入式数据库在Maven中运行单元测试?

来自分类Dev

如何设置django在单元测试期间不使用内存数据库?

来自分类Dev

对包含从数据库填充的列表的域模型进行单元测试

Related 相关文章

  1. 1

    连接到数据库的单元测试异步功能

  2. 2

    涉及数据库的单元测试

  3. 3

    从数据库返回单元测试和数据

  4. 4

    JDBC /数据库单元测试的最佳实践

  5. 5

    用于数据库服务的AngularJS单元测试

  6. 6

    如何对Django数据库迁移进行单元测试?

  7. 7

    如何对Django数据库迁移进行单元测试?

  8. 8

    单元测试数据库调用

  9. 9

    rspec rails:单元测试数据库查询

  10. 10

    如何对具有数据库访问权限的方法进行单元测试?

  11. 11

    如何对使用数据库访问的静态方法进行单元测试?

  12. 12

    如何对将项目添加到数据库的方法进行单元测试?

  13. 13

    与数据库交互而不在数据库中创建数据的单元测试代码

  14. 14

    在单元测试之间恢复数据库:数据库仍在使用中

  15. 15

    当数据库架构和实体更改时,单元测试失败,但单元测试未更改

  16. 16

    如何在Laravel 4单元测试中的setupBeforeClass方法中为数据库设置种子?

  17. 17

    Django单元测试需要很长时间才能创建测试数据库

  18. 18

    symfony中的单元测试实体何时使用测试数据库?

  19. 19

    用于单元测试的核心数据临时数据库

  20. 20

    单元测试检查数据库查询是否正确–可以嘲笑什么?

  21. 21

    使用Spock和Robospock进行单元测试以创建SQLite数据库

  22. 22

    需要空数据库的实体框架代码第一个单元测试

  23. 23

    Visual Studio 2013:单元测试SQL Server数据库项目时模拟存储过程

  24. 24

    使用Spring + JPA但没有数据库可用的单元测试Service Bean

  25. 25

    我应该使用数据库模拟进行单元测试吗

  26. 26

    基于angularjs单元测试承诺的服务(SQlite数据库服务)

  27. 27

    如何使用Oracle作为嵌入式数据库在Maven中运行单元测试?

  28. 28

    如何设置django在单元测试期间不使用内存数据库?

  29. 29

    对包含从数据库填充的列表的域模型进行单元测试

热门标签

归档