Я новичок в BDD, даже для всего мира тестирования.Как мне проверить метод isEqual типов объектов значений в BDD?
Я пытаюсь использовать методы 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==
) элегантно? или я не должен проверять его вообще?
Я использую быстрый и Quick для среды тестирования. Quick обеспечивает механизм, называемый SharedExample для уменьшения шаблонов. Но так как swift - это статический язык ввода текста, а общий пример Quick не поддерживает generics, я не могу напрямую использовать общий пример для проверки объектов значений.
Я придумал workaround, но не считаю его элегантным.
Это правда (к сожалению). –