2014-11-21 2 views
6

Используя ReSharper 8.2 на локальном компьютере и NUnit 2.6.3 на сервере сборки, был обнаружен некоторый тест, который прошел в ReSharper и не удалось выполнить в NUnit. Установлены локальные и точные результаты NUnit, поэтому это не разница между компьютерами. Двое из моих коллег провели те же тесты и имели одинаковые результаты, поэтому мне не кажется что-то испортить мой компьютер.Единичный тест ReSharper и NUnit дают разные результаты

Упрощенная версия тестов:

[Test] 
public void Test_UrlQueryString() 
{ 
    var urlInput = "http://www.domain.com/page-with-querystring?url=https://www.domain2.com/page%3Fp%3DPEPE"; 
    var uri = new Uri(urlInput); 

    Assert.AreEqual(urlInput, uri.ToString()); 
} 

[Test] 
public void Test_Dot() 
{ 
    var urlInput = "http://www.domain.com/page-with-dot.?p=google"; 
    var uri = new Uri(urlInput); 

    Assert.AreEqual(urlInput, uri.ToString()); 
} 

выход ReSharper все зеленые. Выход из NUnit:

Runtime Environment - 
    OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
    CLR Version: 4.0.30319.18444 (Net 4.5) 

ProcessModel: Default DomainUsage: Single 
Execution Runtime: net-4.5 
...................F.F......... 
Tests run: 29, Errors: 0, Failures: 2, Inconclusive: 0, Time: 0.576769973208475 seconds 
    Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0 

Errors and Failures: 

    1) Test Failure : Test.OrganicTest.Test_Dot 
    Expected string length 45 but was 44. Strings differ at index 35. 
    Expected: "http://www.domain.com/page-with-dot.?p=google" 
    But was: "http://www.domain.com/page-with-dot?p=google" 
    ----------------------------------------------^ 

    2) Test Failure : Test.OrganicTest.Test_UrlQueryString 
    Expected string length 87 but was 83. Strings differ at index 76. 
    Expected: "...-with-querystring?url=https://www.domain2.com/page%3Fp%3DPEPE" 
    But was: "...-with-querystring?url=https://www.domain2.com/page?p=PEPE" 
    ----------------------------------------------------------------^ 

ReSharper, похоже, использует ту же версию NUnit (встроенный NUnit 2.6.3)

ReSharper configuration

ли кто-нибудь знает, что, как исправить это? Это ошибка в ReSharper или NUnit?

ответ

10

Первоначально это ошибка в .NET Framework. Поведение URI scaping зависит от среды (версия и конфигурация .NET Framework). Исправлена ​​ошибка в .NET Framework 4.5. Например, давайте рассмотрим код

var uri1 = "http://www.domain.com/page-with-dot.?p=google"; 
var uri2 = "http://www.domain.com/page-with-querystring?url=https://www.domain2.com/page%3Fp%3DPEPE"; 
Console.WriteLine(new Uri(uri1).ToString()); 
Console.WriteLine(new Uri(uri2).ToString()); 

Выход в .NET Framework 3.5:

http://www.domain.com/page-with-dot?p=google 
http://www.domain.com/page-with-querystring?url=https://www.domain2.com/page?p=PEPE 

Выход в .NET Framework 4.5:

http://www.domain.com/page-with-dot.?p=google 
http://www.domain.com/page-with-querystring?url=https://www.domain2.com/page%3Fp%3DPEPE 

Кроме того, вы можете внести некоторые изменения в избегая поведения с вашим файлом .config. Например, есть вариант для .NET 4.0 и слэш спасаясь:

<configuration> 
    <uri> 
    <schemeSettings> 
     <add name="http" 
      genericUriParserOptions="DontUnescapePathDotsAndSlashes" /> 
    </schemeSettings> 
    </uri> 
</configuration> 

Я думаю, в вашем случае, ReSharper и NUnit просто используют разные конфиги. Хотя, действительно странно, что NUnit получил старые уроки экранизации для .NET 4.5. Возможно, NUnit использует некоторые библиотеки microsoft из .NET 4.0. Кроме того, вы можете пропустить тест в ReSharper вручную, установив параметр Framework в CLR4.0. В любом случае, вы должны переписать тесты с независимой от окружающей среды логикой.

Полезные ссылки:

+2

Это точно правильный ответ, но он отсутствует ключевой бит информации - .net 4.5 есть «режим совместимости» (как описано в [этом блоге] (HTTP: // блогам .msdn.com/b/dotnet/archive/2012/10/17/net-framework-4-5-off-to-a-great-start.aspx), который дает поведение .net 4.0 при запуске в .net 4.0. Вам нужно будет установить последнюю версию ReSharper 8.2.3, чтобы получить версию, которая работает правильно - нет режима quirks.См. [Эта проблема с YouTrack для ошибки ReSharper] (https://youtrack.jetbrains.com/issue/RSRP-412080) – citizenmatt

+0

Да, похоже, в Resharper появилась ошибка. – Riga