如何为改变数据的方法编写单元测试?
我有以下方法:
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?