2016-11-28 5 views
0

Письменный тест для моего приложения. Хотелось бы, чтобы проверить связь с обработкой Exeption, пока я создал метод, который работает и выглядит как:Единичный тест для подключения/C#

 [Test] 
     public void TestCreateConnection() 
     { 
      Connection testConnection = new Connection(); 
      connection.CreateConnection(correctURL, IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name"); 
      testConnection.CreateConnection(correctURL, IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name"); 
     } 

В finall версии работает над чем-л, который будет перехватывать исключение - WebExeption. У меня уже есть блок try/catch внутри моего метода, который собирается создать соединение, он работает c. Но это нужно и в моем тесте. Я думал, что это должно выглядеть:

[Test] 
     [ExpectedException(typeof(WebException))] 
     public void TestCreateConnection() 
     { 
      Connection testConnection = new Connection(); 
      connection.CreateConnection(correctURL, IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name"); 

      testCconnection.CreateConnection(correctURL, IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name"); 
      Assert.Catch<WebException>(() => connection.CreateConnection("test", IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name");); 
     } 

Как мы можем видеть, я изменил первый ARG метода, который является URL-адрес, он будет Каус веб Exeption. Как я могу написать его правильно?

+0

На мой взгляд, вы должны использовать Assert.Throws вместо ExpectedExceptionAttribute. Использование Assert.Throws делает его более явным, если вы ожидаете исключения. Ваш код должен выглядеть так: 'Assert.Throws (() => connection.CreateConnection (...)'. Кроме того, NUnit 3.0 официально не поддерживает ExpectedExceptionAttribute. В конце вы должны иметь два независимых модульных теста - один для действительного соединения и один для недействительного соединения. –

ответ

0

Я не думаю, что в вашем подходе к тестированию исключения есть что-то не так. Однако я предлагаю вам разделить тест на два теста - один для случая, когда вы получаете действующее соединение, и одно для случая, когда вы получаете плохое соединение.

[Test] 
    public void WhenCorrectUrlIsPassedConnectionCreatedSuccessfully() 
    { 
     Connection testConnection = new Connection(); 
     connection.CreateConnection(correctURL, IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name"); 
    } 

    [Test] 
    [ExpectedException(typeof(WebException))] 
    public void WhenIncorrectUrlIsPassedThenWebExceptionIsThrown() 
    { 
     Connection connection = new Connection(); 
     Assert.Catch<WebException>(() => connection.CreateConnection("test", IDName + connection.ApiKey, connection.ContentType, connection.MediaType, connection.Get, false, "name");); 
    } 

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