我正在努力提高我的 TDD/OO 技能,但每次我尝试使用 TDD 来影响设计时,我都会遇到从哪里开始的障碍。
这是我的用例/故事:
Identify a subset of clients that are due for a review. Start a review for them and send out a couple of letters.
现在我的肌肉内存已经打开了一个查询窗口,编写了查询,设计了一个 UI,然后我必须编写一些代码将这些位粘合在一起。
我希望域代码成为焦点并且我希望它处于测试状态。
那么在这种情况下最简单的做法是什么?
我想我想要我的客户名单。我已经有一个客户端对象(CSLA 样式),尽管它有很多难以打破的依赖项。我想我可以有一个 ClientReviewClients 对象并测试我是否获得了正确数量的评论。我需要考虑很多因素,所以看起来并不简单。无论如何,我如何 mock 我在 20 个客户中有 10 个评论这一事实?
有人可以帮我吗?
在这里 - 我将从几个测试开始:
class IdentifyClientsDueForReview {
public void CanStartSearch() {
var s = new ClientSearcher();
}
public void CanSearchClients() {
var s = new ClientSearcher();
var r = s.Find(c => c.Id == 1);
Assert.IsNotNull(r);
}
public void Finds10Clients() {
var db = new MockDB();
// Clients that need review
for (int i = 0; i < 10; i++) {
db.Add(new Client() {
NextReview = DateTime.Today.SubtractDays(i)
});
}
// Clients that don't need review
for (int i = 0; i < 10; i++) {
db.Add(new Client() {
NextReview = DateTime.Today.AddDays(i)
});
}
var s = new ClientSearcher(db);
var r = s.Find(c => c.NextReview <= DateTime.Today);
Assert.AreEqual(10, r.Count);
}
}
构建时考虑了 Linq To Sql 或类似的后端 ORM - 否则,您可能会放弃 Find
方法并有一些硬编码 FindBy
方法。
这应该给你 ClientSearcher
类,它使用一个接口(interface)来访问数据库。两者 MockDB
和你的 RealDB
类将实现该接口(interface)。
Tôi là một lập trình viên xuất sắc, rất giỏi!