С# Unit Testing (Nunit) Основной метод консольного приложения?

У меня вопрос о модульном тестировании основного метода консольного приложения. Стандартная подпись

  public static void Main(string[] args)

Я хочу, чтобы у меня была возможность проверить, чтобы передать только один параметр. Если передано несколько параметров, я хочу, чтобы тест завершился с ошибкой.

Я не думаю, что могу издеваться над этим с помощью MOQ как своего статического метода.

У кого-нибудь есть опыт?

Любые идеи?

Спасибо

Ответ 1

В вашем сценарии нечего насмехаться. Статический Program.Main - это метод, как и любой другой, и вы проверяете его как таковой - путем его вызова.

Проблема с методом static void заключается в том, что вы можете только проверить, генерирует ли она исключение или взаимодействует с входным аргументом (или, в конечном счете, с другими статическими членами). Поскольку с string[] нет возможности взаимодействовать, вы можете протестировать предыдущий случай.

Однако более разумным подходом является делегирование всей логики, содержащейся в Main, для разделения компонента и проверки его. Это позволяет не только тщательно протестировать логику обработки входных аргументов, но и упростить Main:

public static void Main(string[] args)
{
    var bootstrapper = new Bootstrapper();
    bootstrapper.Start(args);
}