如何在存储库模式中单元测试代码?

时间:2013-12-31 15:53:06

标签: entity-framework unit-testing tdd

如何测试这种情况:

  

我有一个用户存储库(到目前为止)只有一个方法: SaveUser
  “SaveUser”用于接收用户作为参数并使用EF 6将其保存到DB   如果用户是新用户(新用户由数据库中不存在的“电子邮件”定义),则该方法应该插入它,如果不是,则该方法应该只更新它。
  从技术上讲,如果调用此方法,则所有业务验证都可以,只保留实际持久化用户的行为

我的问题是:我实际上并不想每次都创建一个新用户或更新一个用户......这将导致未来出现不良副作用(让我们称之为“纸质踪迹”)......我这样做吗?

这是测试代码:

public void CreateOrUpdateUserTest1()
    {
        UserDTO dto = new UserDTO();
        dto.UniqueId = new Guid("76BCB16B-4AD6-416B-BEF6-388D56217E76");
        dto.Name = "CreateOrUpdateUserTest1";
        dto.Email = "leo@leo.com";
        dto.Created = DateTime.Now;
        GeneralRepository repository = new GeneralRepository();
        //Now the user should be CREATED on the DB
        repository.SaveUser(dto);

        dto.Name = "CreateOrUpdateUserTest";
        //Now the user should be UPDATED on the DB
        repository.SaveUser(dto);
    }

1 个答案:

答案 0 :(得分:1)

您的存储库可能需要调用第三方库的某些方法来实际持久保存数据。在这种情况下进行单元测试只有在您可以模拟第三方库并进行验证并且存储库正确调用特定持久性方法时才有意义。要实现这一点,您需要重构代码。

否则,你不能对这个类进行单元测试,但也要考虑可能没有必要。负责持久性的第三方库是一个不同的组件,因此测试数据库存储是否与您的类正常工作相当于Integration testing