2016-06-14 4 views
0

У нас есть проект ASP.NET. Проект устанавливается через InstallShield. У нас есть тестовый метод, который бросает SoapException и сравнивает его сообщение:SoapException имеет то же сообщение, но в разных формах

internal static string ExceptionMsgCheckForConflicts = "Server was unable to process request. ---> Rethrow exception, look at inner exception ---> System.ArgumentException ---> Item is invalid"; 
    internal static string ErrorMsgCheckForConflictsInvalidException = "Exception should start with 'Server was unable to process request. ---> Rethrow exception, look at inner exception ---> System.ArgumentException ---> Item is invalid'"; 

    [Test] 
    public void ConflictDetectorItemNotAnItemNode() 
    { 

     Assert.Throws<SoapException>(() => 
     { 
      try 
      { 
       //Some code that throws SoapException 
      } 
      catch (SoapException ex) 
      { 
       Assert.IsTrue(ex.Message.StartsWith(ExceptionMsgCheckForConflicts, StringComparison.OrdinalIgnoreCase), ErrorMsgCheckForConflictsInvalidException); 
       throw; 
      } 
     }); 
    } 

код работает довольно хорошо. Но мы решили запустить этот тест на установленной версии проекта. Проблема заключается в том, что в этом случае исключение с сообщением:

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Exception: Rethrow exception, look at inner exception ---> System.ArgumentException: Item is invalid 

На самом деле это одно и то же сообщение, но содержит имена исключений. Я и мой босс понятия не имею, почему это происходит.

ответ

0

Мне интересно, вызывает ли проблема нечетная попытка/улов/ретрон. Обычно, используя NUnit, никто не улавливает исключений, которые утверждаются. Более простой способ, чтобы написать тест был бы ...

var ex = Assert.Throws<SoapException>(() => 
{ 
    // Code that throws SoapException 
} 

Assert.That(ex.Message.StartsWith(...)); 

Кстати, я не мог решить, был ли это ответ или комментарий, но ответы упрощают форматирование кода. :-)