Передайте поиск второй функции VLOOKUP с функцией IFERROR , если первый сбой.
В I5 as,
=IFERROR(VLOOKUP(G5, A:E, 5, FALSE), VLOOKUP(G5, C:E, 3, FALSE))
Заполнить при необходимости.
Измените настройку на другой метод и вызовите этот метод из обоих тестов. Тесты не должны вызывать другие тесты.
Я думаю, что это плохая идея. Вы хотите, чтобы ваш модульный тест проверял одно и только одно. Вместо того чтобы создавать вызов с помощью другого теста, смоделируйте вызов и передайте его в качестве аргумента.
Модульный тест должен проверять одну единицу / функцию вашего кода по определению. Если он вызывает другие модульные тесты, он тестирует более одного модуля. Я разбиваю его на отдельные тесты.
Да - модульные тесты должны быть отдельными и иметь целью проверить только одну вещь (или, по крайней мере, небольшое количество тесно связанных вещей). Кроме того, вызовы data.Expect и phone.Expect в вашем методе тестирования создают ожидания, а не вызовы-заглушки, которые могут сделать ваши тесты хрупкими, если вы выполните рефакторинг ...
IMHO, вы должны сделать одно из следующего:
В качестве контраргумента:
Я твердо верю, что хорошо спроектированные модульные тесты должны зависеть друг от друга!
Конечно, это имеет смысл, только если инфраструктура тестирования знает об этих зависимостях, поэтому может прекратить выполнение зависимого теста, когда зависимость не работает. Более того, такая структура может передавать прибор от теста к тесту, так что он может основываться на растущем и расширяющемся приспособлении вместо того, чтобы перестраивать его с нуля для каждого отдельного теста. Конечно, кэширование сделано для того, чтобы избежать побочных эффектов, если от одного и того же примера зависит более одного теста.
Мы реализовали эту идею в расширении JExample для JUnit . Пока нет порта C #, хотя есть порты для Ruby и Smalltalk и ... самая последняя версия PHPUnit унаследовала обе наши идеи: зависимости и повторное использование фикстур .