如何为改变数据的方法编写单元测试?

我有以下方法:

Void UpdateUser(User user){}

我需要检查这种方法是否会正常工作。

我用单独的数据库在单元测试中检查了这一点。 但是很多有经验的人说如果我用这种方法不是单元测试的话; 这就是集成测试。

但我不知道如何模拟单元测试。

UpdateUser方法中编写的代码将尝试使用Entity框架更新数据。

如果我嘲笑(其实我也不怎么这样做),这将如何与实体框架一起工作?


模拟意味着你开发软件组件(类)的方式是任何具有行为的类都被用作接口(或抽象类)。 你编程抽象。 运行时您使用某些东西(服务定位器,DI容器,工厂等)来检索/创建这些实例。

最常见的方法是使用施工注射。 这里是一个很好的解释,为什么会使用DI,以及如何做到这一点的例子。

在你的情况下,使用实体框架的组件(例如你的仓库)必须实现一个仓库界面,任何使用仓库的类都应该使用它作为界面。

这样,你可以在你的unittests中嘲笑仓库。 这意味着你创建了一个unit-test-repository类(与任何数据库或EF无关),并且在你创建你想要单元测试的类的实例时使用它。

希望这有助于。 有很多来源可以找到。 就我个人而言,我只是读了这本书,发现它非常好。 这是作者的博客。


您可以使用事务和回滚,或者创建一个测试用户尝试更新。 断言,然后在finally块中删除测试用户。

你可以使用像moq,犀牛等模拟框架。moq很容易,你可以找到许多用DI像统一框架来演示moq的例子。


如果你的班级是这样的

public class UserRepository()
{
    Sqlcontext _context;
    void UpdateUser(User user)
    {
       _context.Users.Add(user);
    }
}

那么这不是单元可测试的。

虽然这不是一个单元测试,但如果您坚持连接数据库并对其进行测试,则可以将其更改为

User UpdateUser(User user)
{
    _context.Users.Add(user);
    return user;
}

并测试是否

user.Id > 0  

在这里,你基本上只是测试实体框架。

链接地址: http://www.djcxy.com/p/82253.html

上一篇: How to write a unit test for the methods that change data?

下一篇: ASP.NET MVC Global DB