最近,我开始阅读 BDD 和 TDD 并迷上了。我迷失在大量杂乱无章的信息来源和关于什么是最好什么不是什么的不同意见中。最后我选择了xBehave & xUnit。我喜欢流畅的语法以及使用 Fluent Assertions 和 Fluent Validation 轻松定义行为。
我也在尝试通过我正在学习的测试项目来实现洋葱架构。这是我的场景:为了简单起见,该项目是一个产品跟踪器。我可以创建产品并跟踪谁拥有它。我想实现两个规范:
- 当创建没有名称的新产品时,应显示错误
- 如果在没有分配所有者的情况下创建新产品,则应显示错误。
我创建了实例化一个新产品和一个新产品服务的规范,而新产品服务又创建了产品。规范通过并且正在验证,现在问题是:
- 如何测试我的 ProductRepository 类?我是接下来测试它还是模拟它并先完成所有规范,然后再回来测试存储库类?
- 我应该在第一个规范中嘲笑 ProductService 类吗?
- 这是在单元测试级别完成的吗?我应该创建一个单元测试类吗?
- 测试存储库不会使其成为集成测试吗?
到目前为止,我还没有 UI,我正在为域、服务和基础架构层编写规范。
- 我需要使用 watin 进行 UI 测试吗?
- 切换到 watin/specflow 会更有意义,并且会节省从上到下进行全面测试层的努力吗?
这是我研究的规格之一:
[Scenario]
public void creating_new_product_without_a_name_should_throw_error()
{
var productService = default(IProductService);
var action = default(Action);
_
.Given("a new product", () =>
productService = new ProductService() as IProductService)
.When("creating the new product without a name", () =>
action = () => productService.Create(new Product()))
.Then("it should should display an error", () =>
action.ShouldThrow<ValidationException("Name is required."));
}
提前感谢您的回复,如果您正在回答此线程,请提供一些材料/文章/示例代码,以说明您的建议为什么会更好地遵循。