Если функция зависит от другой функции, как вы добавляете эту внутреннюю функцию к фиктивным данным для модульного тестирования? - PullRequest
0 голосов
/ 27 июня 2019

Так у меня что-то вроде так:

class MyClass {
    private myVar;

    public MyClass(someValue) {
        // Performs some operation to determine myVar
    }

    public double calculateThing() {
        // Returns some arithmetic operation on myVar
    }

    public double calculateOtherThing() {
        newVar = calculateThing();
        // Returns some arithmetic operation on newVar
    }
}

calculateThingUnitTest() {
    MyClass class = new MyClass(someValue);

    Assert::AreEqual(someConstant, class.CalculateThing());
}

calculateOtherThingUnitTest() {
    MyClass class = new MyClass(someValue);

    Assert::AreEqual(someOtherConstant, class.CalculateOtherThing());
}

Понятно, что calculateThingUnitTest является правильным модульным тестом, потому что он инициализирует класс, присваивает ему определенное литеральное независимое значение в конструкторе, и утверждение, которое он делает, основано только на calculateThing(), поэтому он тестирует один «модуль» приложения.

Однако, calculateOtherThingUnitTest вызывает calculateOtherThing, который затем вызывает calculateThing, чтобы определить, верен ли результат. Таким образом, если calculateThing завершится с ошибкой, calculateOtherThing также будет с ошибкой.

Чтобы предотвратить это, вы бы хотели поместить некоторое фиктивное значение вместо calculateThing, и вы могли бы достичь этого, вставив новую переменную-член в MyClass и загрузив calculateThing в эту переменную-член. Затем перед вызовом calculateOtherThing вы можете просто вставить литеральное значение в эту переменную-член, и у вас будет подходящий модульный тест.

Однако добавление новой переменной-члена и ее публичное показание кажется чрезмерно излишним. Есть ли лучший способ добиться этого?

Примечание. Хотя я использую псевдокод, я работаю в C # с проектом модульного тестирования Visual Studio .Net.

1 Ответ

1 голос
/ 27 июня 2019

То, что вы ищете, это частичное издевательство. Вам нужно смоделировать метод, который не тестируется. И вам нужно оставить метод тестируемым, как в случае реализации по умолчанию. Поэтому, когда вы вызываете тестируемый метод, все остальные методы не вызываются, поскольку они проверяются.

Таким образом, вы могли бы посмеяться над CalcuThing, а затем просто протестировать другие методы, как есть.

Ссылка Stackoverflow

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...