Для обеспечения стандартов кодирования у меня есть пара модульных тестов, в которых используется рефлексия, чтобы убедиться, что все в порядке. Один из них выглядит так:
[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 модифицирует мою сборку?