Teamcity通过添加DataOnStack结构来修改我自己的程序集
本文关键字:修改 我自己 自己的 程序集 结构 添加 DataOnStack Teamcity | 更新日期: 2023-09-27 18:06:30
为了确保编码标准,我进行了几个单元测试,使用反射来查看没有任何问题。其中一个是这样的:
[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 . profile . core . instrumentation . dataonstack "
-----------^
在NUnit.Framework.Assert。That(Object actual, iresolveconconstraint表达式,String message, Object[] args)
在NUnit.Framework.Assert。AreEqual(Object expected, Object actual)
at Litium.Kamakura.UnitTest.CodingStandards. immutablestructs . all_structs_should_be_immutable () in c:'TeamCity'buildAgent'work'99395abb82d2a3b3'Test'Litium.Kamakura.UnitTest'CodingStandards'ImmutableStructs.cs:line 26
-------标准输出:-------
JetBrains.Profiler.Core.Instrumentation.DataOnStack
Teamcity如何以及为什么修改我的汇编?
似乎Teamcity的测试运行器(NUnit测试运行器?)被配置为使用dotCover/dotTrace运行。上面的一个分析器已经编辑了你的代码(记住他们是。net分析器,他们可以在JIT编译时注入代码,等等)。
根据这个bug跟踪,Jetbrains使用这个结构并且不会删除它,所以你将不得不使用一个解决方案。
请参阅Teamcity文档-您可以尝试使用不同的跑步者,或使用NCover收集覆盖,或完全禁用覆盖。