【发布时间】:2011-10-08 00:31:18
【问题描述】:
环境
在我的解决方案中,我有三个项目,它们是:
- Web (Asp.net MVC4)
- 模型(类库)
- 测试(测试项目)
在模型项目中有:
Couple = 类
IRepository = 基于接口的存储库
ICoupleRepository = 接口存储库对
Implementationrepository = CoupleRepository 夫妇
在测试项目中有:
Fake/CoupleRepository = 存储库对的假实现(在 Fake 文件夹内)。
CoupleTest 夫妇 class= 测试
行为
通过在下面添加一对,需要修改一些属性,同时添加一对对象也将其他对象添加到数据库中。
我将此逻辑放入Add方法中的CoupleRepository(不是假的)存储库中,设置这些属性,添加对象对和另外两个对象。
public class CoupleRepository : ICoupleRepository
{
public void Add(Couple couple)
{
couple.Bride.Gender = Gender.Female;
couple.Groom.Gender = Gender.Male;
db.Couples.Add(couple);
db.Users.Add(new User{ CoupleID = couple.Bride.ID });
db.Users.Add(new User{ CoupleID = couple.Groom.ID });
db.SaveChanges();
}
}
问题
在我的测试类CoupleTest中,也需要测试这些用户的添加,以及属性的修改。
为我的额头创建一个假存储库对我没有帮助,真的需要测试默认 CoupleRepository 中的代码。
你给我的小费是什么?
Mocks 和 Stubs 在这一切中都来自哪里?
这种逻辑会在哪里拯救一对夫妇?
我必须测试存储库?或许理想的方式是测试控制器?
很多问题,我知道 =)
我是 TDD 新手,不知道我的方向是否正确。
测试默认存储库并不理想,因为它访问数据库。
【问题讨论】:
-
如果它实际上是 TDD,你不会先写单元测试吗?
-
我认为你的假实现是你的模拟。你只是没有这么称呼他们。然而,要成为真正有用的模拟,您需要能够告诉它们以某些方式表现,以便您可以测试不同的行为。
-
@DavidWick 是的,你说的。如果他没有从测试开始,那么他根本就没有进行测试驱动开发。
-
事实上这是唯一的实现。我知道我做错了,但不知道从哪里开始测试。问题是在哪里放置这个实现以及如何测试它?
标签: asp.net-mvc-3 unit-testing architecture tdd mocking