gpt4 book ai didi

c# - 用 TDD 思考 OO——从哪里开始?

转载 作者:行者123 更新时间:2023-11-30 14:44:02 26 4
gpt4 key购买 nike

我正在努力提高我的 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<Criteria>方法。

这应该给你 ClientSearcher类,它使用一个接口(interface)来访问数据库。两者 MockDB和你的 RealDB类将实现该接口(interface)。

关于c# - 用 TDD 思考 OO——从哪里开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com