Модульные тесты VS2008 - утверждают выходы метода

Как сказано прежде, необходимо использовать класс, реализовывая интерфейс Set вместо Списка, чтобы быть уверенными в уникальности элементов. Если необходимо сохранить порядок элементов, интерфейс SortedSet может тогда использоваться; реализации класса TreeSet тот интерфейс.

5
задан Community 23 May 2017 в 11:48
поделиться

6 ответов

Звучит как невероятно плохая идея. Environment.Exit (0), очевидно, будет работать в соответствии с предписаниями, поэтому ваши модульные тесты не работают.

Если вы действительно хотите проверить это, вы можете запустить отдельный процесс и проверить код возврата - взгляните на упаковку его можно найти в Process.Start .

Думаю, еще одним вариантом является выделение этого кода и внедрение тестового шпиона или использование фиктивного объекта для проверки правильного поведения.

Возможно, вы сможете что-то сделать с Typemock Isolator - я считаю, что это позволяет вам имитировать статические методы .

4
ответ дан 18 December 2019 в 13:17
поделиться

Единственный вариант здесь - имитировать класс Environment с помощью фейкового метода Exit.

2
ответ дан 18 December 2019 в 13:17
поделиться

Единственное, что мне приходит в голову, это что-то вроде:

static void myMethod()
{
    DoEnvironmentExit(0);
}

static void DoEnvironentExit(int code)
{
    #if defined TEST_SOLUTION
      SomeMockingFunction(code);
    #else
      Environment.Exit(code);
    #endif
}
0
ответ дан 18 December 2019 в 13:17
поделиться

Вы можете добавить аргумент в свой метод, чтобы передать ему поддельное окружение, в котором функция exit () метод не выйдет.

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

0
ответ дан 18 December 2019 в 13:17
поделиться

Вам нужно будет создать оболочку для класса Environment, а затем использовать оболочку в своем коде. Для своих модульных тестов внедрите фиктивную версию оболочки. В следующем примере используется RhinoMocks для проверки того, что метод вызывает оболочку с ожидаемым аргументом.

public class EnvironmentWrapper
{
    public virtual void Exit( int code )
    {
        Environment.Exit( code );
    }
}


public class MyClass
{
    private EnvironmentWrapper Environment { get; set; }

    public MyClass() : this( null ) { }

    public MyClass( EnvironmentWrapper wrapper )
    {
        this.Environment = wrapper ?? new EnvironmentWrapper();
    }

    public void MyMethod( int code )
    {
        this.Environment.Exit( code )
    }
}


[TestMethod]
public void MyMethodTest()
{
     var mockWrapper = MockRepository.GenerateMock<EnvironmentWrapper>();

     int expectedCode = 5;

     mockWrapper.Expect( m => m.Exit( expectedCode ) );

     var myClass = new MyClass( mockWrapper );

     myclass.MyMethod( expectedCode );

     mockWrapper.VerifyAllExpectations()
}
5
ответ дан 18 December 2019 в 13:17
поделиться

Вы не сможете это проверить - Environment.Exit полностью закрывает приложение. Это означает, что любой домен приложений, использующий этот код, будет полностью выгружен, будь то ваше производственное приложение или среда модульного тестирования.

3
ответ дан 18 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: