Teamcity изменяет мою собственную сборку, добавляя структуру DataOnStack - PullRequest
2 голосов
/ 22 августа 2011

Для обеспечения стандартов кодирования у меня есть пара модульных тестов, в которых используется рефлексия, чтобы убедиться, что все в порядке. Один из них выглядит так:

[Test]
public void All_structs_should_be_immutable()
{
    var mutableStructs = typeof (Product).Assembly
        .GetTypes()
        .Where(type =>
                type.IsValueType && !type.IsCompilerGenerated() &&
                !type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).All(
                field => field.IsInitOnly))
        .OrderBy(type => type.FullName);

    foreach (var mutableStruct in mutableStructs)
    {
        Console.WriteLine(mutableStruct.FullName);
    }

    Assert.AreEqual("", string.Join(", ", mutableStructs.Select(x => x.FullName).ToArray()));
    Assert.AreEqual(0, mutableStructs.Count());
}

Класс Product находится в моей собственной сборке, которая не имеет ничего общего с Jetbrains / Teamcity.

Это прекрасно работает при запуске тестов с Resharper. Но когда я запускаю его в Teamcity, я получаю эту ошибку:

Тест (ы) не пройден. Ожидаемая длина строки 0, но была 51. Строки отличаются по индексу 0.

Ожидаемое:

Но было: "JetBrains.Profiler.Core.Instrumentation.DataOnStack"

----------- ^

at NUnit.Framework.Assert.That (Объект актуален, выражение IResolveConstraint, Строковое сообщение, Аргументы объекта [])

в NUnit.Framework.Assert.AreEqual (ожидаемый объект, фактический объект)

в Litium.Kamakura.UnitTest.CodingStandards.ImmutableStructs.All_structs_should_be_immutable () в c: \ TeamCity \ buildAgent \ work \ 99395abb82d2a3b3 \ Test \ Литий.Kamakura.

------- Стандартный вывод: -------

JetBrains.Profiler.Core.Instrumentation.DataOnStack

Как и почему Teamcity модифицирует мою сборку?

1 Ответ

4 голосов
/ 20 января 2012

Похоже, что тестовый прогон Teamcity (тестовый прогон NUnit?) Был настроен для работы с dotCover / dotTrace.Один из описанных выше профилировщиков отредактировал ваш код (помните, что они являются профилировщиками .net и могут, среди прочего, вводить код во время компиляции JIT).

В соответствии с этой ошибкой Jetbrains использует эту структуру и не удалит ее, поэтому вам придется использовать обходной путь.

См. Также Документация Teamcity - вы можете попробовать запустить с другим бегуном или собрать покрытие с помощью NCover, или вообще отключить покрытие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...