전 세계 시험을 치르는 경우에도 BDD를 처음 사용합니다.BDD에서 값 개체 유형의 "isEqual"메서드를 테스트해야합니까?
신속한 선형 대수학 라이브러리를 작성할 때 BDD 연습을하려고합니다. 코드를 작성할 때 그래서 Matrix
같은 많은 값 오브젝트 유형이있을 것이다, Vector
등, 나는 여전히 TDD 원칙에 충실 할 필요가 가정 (내가 맞다?) :
없이 코드의 한 줄을 작성하지 않음
실패한 테스트 나는 Equatable
프로토콜을 준수하고 ==
연산자를 구현해야하는 값 객체 유형을 구현합니다. 이것은 코드를 추가하기 때문에 실패한 테스트가 필요합니다. 어떻게 이런 시나리오에 대한 스펙을 작성하나요? 두 가지 이유 못생긴 상용구 것
describe("Matrix") {
it("should be value object") {
let aMatrix = Matrix<Double>(rows: 3, cols:2)
let sameMatrix = Matrix<Double>(rows: 3, cols:2)
expect(sameMatrix) == aMatrix
let differentMatrix = Matrix<Double>(rows: 4, cols: 2)
expect(differentMatrix) != aMatrix
}
}
이 :
하나는 같은 몇 가지 방법을 제안 할 수 있습니다
- 이 값 오브젝트 유형을 많이하고 나는 모두를 반복해야 할 수도 있습니다 그 중
- 두 개의 개체가 동일하지 않은 경우가 많이있을 수 있습니다. 위의 사양을 예로 들면,
return lhs.rows == rhs.rows
과 같은==
의 구현은 테스트를 통과합니다. 이 "버그"를 드러내려면expect(matrixWithDifferentColmunCount) != aMatrix
과 같은 또 다른 기대를 더해야합니다. 다시 한번 말하지만, 이러한 일종의 반복은 모든 가치 객체 유형에 대해 발생합니다.
따라서이 "isEqual"(또는 operator==
) 메소드를 어떻게 우아하게 테스트해야합니까? 또는 나는 그것을 전혀 시험해서는 안되는가?
테스트 프레임 워크에는 swift와 Quick을 사용하고 있습니다. Quick는 보일러 플레이트를 줄이기 위해 SharedExample이라는 메커니즘을 제공합니다. 그러나 신속한 정적 유형 지정 언어 및 Quick의 공유 예제는 제네릭을 지원하지 않으므로 직접 공유 예제를 사용하여 값 개체를 테스트 할 수는 없습니다.
나는 workaround을 생각해 냈지만 우아한 것으로 생각하지 않습니다.
사실입니다 (슬프게도). –