【发布时间】:2019-02-18 13:06:38
【问题描述】:
我知道在单元测试中,硬编码是首选,因为我们不想编写尽可能多的代码。
但是,对于集成测试,相同的原则是否仍然适用?对于上下文,这是一个常见的场景:
- TodoController
- TodoService
- Serializer/Transformer/随便你怎么称呼它
以下是关于这两种方法的假想代码:
- 硬编码
// Arrange
$note = new Note('note123', 'John', 'example message');
$this->noteRepository->save($note);
// Act
$response = $this->json('GET', '/api/notes');
// Assert
$response->seeJsonEquals([
'id' => 'note123',
'author' => 'John',
'message' => 'example message'
]);
- 软编码(计算)
// Arrange
$note = new Note('note123', 'John', 'example message');
$this->noteRepository->save($note);
// Act
$response = $this->json('GET', '/api/notes');
// Assert
$noteSerializer = new NoteSerializer();
$response->seeJsonEquals($noteSerializer->serialize($note));
软编码方法的唯一问题是,如果 Serializer 是问题所在,测试仍然会通过,因为控制器和预期值都使用它。
但是,我们可以通过为 Serializer 创建另一个测试来解决这个问题。
我们可能有很多小测试,但我认为与硬编码相比,它可以节省大量时间。如果我们改变我们的响应结构,硬编码的测试也需要一些改变,但软编码的测试只需要在它自己的测试中改变。
我可能遗漏了一些东西,但我已经尝试用谷歌搜索它,我看到的都是关于单元测试的,所以我想问问是否同样的原则也适用于集成测试
【问题讨论】:
标签: testing tdd integration-testing