但是,我发现虽然可以运行400个这些测试(按顺序),但某些测试要么挂起xUnit运行器,要么完全降低它.
我不关心某些测试是否无法在Linux上运行,某些测试与DTC和一些我们不需要支持的非托管gumph有关.
然而,我真正想要的是对这些测试应用忽略,并且在构建输出中正确地标记了测试被忽略的事实.
这个问题可以归结为我想一些可能的解决方案
如果我可以避免修改原始代码太多太大,因为代码不是我的改变,并且应用大量的跨平台黑客可能不会太顺利.
ric*_*ver 36
XUnit v2.0现已推出.直接支持可跳过的测试.使用:
[Fact (Skip = "specific reason")]
Igo*_*aka 32
我会避免外化跳过测试(即如果可能的话,配置/命令文件).这有点违背使测试易于运行和值得信赖.当其他人开始参与时,在代码中忽略测试是最安全的方法.
我可以看到许多选项,这里有两个涉及修改现有代码.
在VS解决方案中,定义另一个定义预编译器标志的配置MONOWIN(只是为了明确表示它是用于在Windows上编译以在Mono上使用的代码).
然后定义一个属性,该属性将在为Mono编译时忽略测试:
public class IgnoreOnMonoFactAttribute : FactAttribute {
#if MONOWIN
public IgnoreOnMonoFactAttribute() {
Skip = "Ignored on Mono";
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
实际上很难找到这种方法的任何优点,因为它涉及使用原始解决方案进行模拟,并增加了需要支持的另一种限制.
以下是与option1类似的解决方案,但不需要单独的配置:
public class IgnoreOnMonoFactAttribute : FactAttribute {
public IgnoreOnMonoFactAttribute() {
if(IsRunningOnMono()) {
Skip = "Ignored on Mono";
}
}
/// <summary>
/// Determine if runtime is Mono.
/// Taken from http://stackoverflow.com/questions/721161
/// </summary>
/// <returns>True if being executed in Mono, false otherwise.</returns>
public static bool IsRunningOnMono() {
return Type.GetType("Mono.Runtime") != null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果使用[Fact]和标记,xUnit runner将运行两次方法[IgnoreOnMonoFact].(CodeRush不这样做,在这种情况下我假设xUnit是正确的).这意味着任何测试方法都必须[Fact]替换为[IgnoreOnMonoFact]
CodeRush测试运行器仍然运行[IgnoreOnMonoFact]测试,但它确实忽略了[Fact(Skip="reason")]测试.我认为这是由于CodeRush反映了xUnit并且实际上没有借助xUnit库运行它.这适用于xUnit runner.
Dom*_*ger 22
现在有了新的选择.
添加NuGet包SkippableFact,它允许您使用[SkippableFact],而不是[Fact],你可以使用Skip.<xyz>一个测试中运行时动态地跳过测试.
例:
[SkippableFact]
public void SomeTestForWindowsOnly()
{
Skip.IfNot(Environment.IsWindows);
// Test Windows only functionality.
}
Run Code Online (Sandbox Code Playgroud)
[Fact(Skip="reason")]
有效,但我更喜欢使用特征
[Fact, Trait("type","unit")]
public void MyUnitTest(){
// given
// when
// then
}
[Fact, Trait("type","http")]
public void MyHttpIntegrationTest(){
// given
// when do things over HTTP
// then
}
Run Code Online (Sandbox Code Playgroud)
用法
dotnet test --filter type=unit
Run Code Online (Sandbox Code Playgroud)
这可以防止我们的构建意外运行开发人员忘记跳过的集成测试,例如[Fact(Skip="Integration")],但是它确实需要单元测试通过添加正确的特征来“选择加入”CI,这无疑不是很好。
| 归档时间: |
|
| 查看次数: |
28309 次 |
| 最近记录: |