Является ли этот unit тест более читаемым при повторении кода?

Вопрос:

Мы обсудили в нашей команде две возможные версии модульного теста.

Версия 1:

var dependencyMock = new Mock<IDependency>();
dependencyMock.Setup(m => m.DoSomething()).Returns("some string");
var classUnderTest = new ClassUnderTest(dependency.Object);

var result = classUnderTest.DoSomethingElse();

Assert.AreEqual("some string", result);

Версия 2:

string expectedResult = "some string";
var dependencyMock = new Mock<IDependency>();
dependencyMock.Setup(m => m.DoSomething()).Returns(expectedResult);
var classUnderTest = new ClassUnderTest(dependency.Object);

var result = classUnderTest.DoSomethingElse();

Assert.AreEqual(expectedResult, result);

Обсуждение состояло в том, следует ли дублировать “некоторую строку” (версия 1) или если она должна быть помещена в переменную (версия 2). Мы все согласились с тем, что дублирование кода отлично подходит для модульных тестов, если это делает тест более удобочитаемым. Для меня версия 1 более читаема (для моего коллеги, версия 2 более читаема). Для меня это выглядит с точки зрения удобочитаемости, и не лучше.

Есть ли другие аргументы для одной из версий? (Я не уверен, если этот вопрос действительно задан здесь, потому что это может привести к обсуждению и не может быть никакого “ответа”…)

Ответ №1

Копирование дубликатов часто бывает хорошим в модульных тестах, потому что оно показывает вам, что происходит, но в этом случае ваше дублирование на самом деле является отрицательным.

Наиболее важным аргументом является то, что версия 2 гарантирует, что вы случайно не будете иметь разные строки. Это хорошая привычка вступать, когда у вас также есть эта ситуация с разными, более сложными объектами.

Оцените статью
TechArks.Ru
Добавить комментарий