我有Hudson作为持续集成服务器,我想使用选项'发布JUnit测试结果报告'.但是我不使用xUnit工具进行测试,而是使用shell脚本运行测试并以简单格式返回结果.我想创建一个脚本,将这些结果转换为JUnit格式.所以我很有趣JUnit文件必须看起来如何?
编辑2016-10-19:
最初的问题是关于VS2015 CTP6与XUnit测试运行器特有的问题.从答案中可以清楚地看出,Visual Studio中的单元测试发现存在更广泛的问题,这可能在许多不同的情况下发生.我已经清理了我的问题以反映这一点.
我还在我自己的答案中加入了一个脚本,我今天仍然使用它来解决类似的问题.
许多其他答案也证明有助于更好地理解VS测试运行器的复杂性.我感谢人们仍在分享他们的解决方案!
原始问题2015-04-10:
从昨天开始,我的Visual Studio Test Explorer将不会发现任何项目的测试.建筑后也没有显示绿色装载栏.
当我转到Visual Studio Test Explorer并单击"全部运行",或者当我右键单击任何测试方法并选择"运行测试"时,我在输出窗口中得到以下内容:
Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
我在Windows 10 Pro Technical Preview上运行Visual Studio 2015 CTP 6,构建10041. .NET Framework版本似乎并不重要 - 它发生在4.0
,4.5.2
和4.6
.
我尝试使用以下测试框架,所有这些都给出了相同的行为:
Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
xunit v2.1.0-beta1-build2945
同 xunit.runner.visualstudio v2.1.0-beta1-build1051
NUnit v2.6.4
同 NUnitTestAdapter v2.0.0
我在GitHub(xunit)上发现了一个类似的问题:无法通过xunit团队的评论发现测试#295:
请注意,据报道,Visual Studio 2015 CTP 5被一般的单元测试(不仅仅是xUnit.net)打破了,所以不要指望它可以工作.
此外,请确保您已清理Visual …
unit-testing xunit test-runner visual-studio-2015 visual-studio-2017
你如何让Jenkins执行python unittest案例?是否可以从内置unittest
包中获得JUnit样式的XML输出?
嗨,我是TDD和xUnit的新手所以我想测试我的方法,例如:
List<T> DeleteElements<T>(this List<T> a, List<T> b);
Run Code Online (Sandbox Code Playgroud)
当然这不是真正的方法:)我可以使用任何Assert方法吗?我觉得这样的事情会很好
List<int> values = new List<int>() { 1, 2, 3 };
List<int> expected = new List<int>() { 1 };
List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });
Assert.Exact(expected, actual);
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?
Xunit有一个很好的功能:你可以用Theory
属性创建一个测试并将数据放在InlineData
属性中,xUnit将生成许多测试,并测试它们.
我想有这样的事情,但参数我的方法不是"简单的数据"(如string
,int
,double
),但我的类的列表:
public static void WriteReportsToMemoryStream(
IEnumerable<MyCustomClass> listReport,
MemoryStream ms,
StreamWriter writer) { ... }
Run Code Online (Sandbox Code Playgroud) 我在我的测试套件中有一个类似这样的测试:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
Run Code Online (Sandbox Code Playgroud)
这个测试按照我的预期工作,但是当我运行它时xUnit会输出一个警告:
警告xUnit2013:不要使用Assert.Equal()来检查集合大小.
但是,警告中没有建议替代方案,谷歌搜索会将我带到xUnit中的源代码,以便验证是否打印了此警告.
如果Assert.Equal()
不是验证集合长度的正确方法,那是什么?
澄清一下:我意识到我可以通过例如提取变量或使用Assert.True(stuff.Count() == 1)
替代来"欺骗"xUnit而不发出此警告.后者只是hacky,而前者感觉就像xUnit试图避免多次迭代一样IEnumerable<T>
,那么这是错误的方法(因为我会分别得到编译器提示,如果这是一个问题),并且xUnit本身不应该多次评估输入(事实上,无论变量提取如何,它都可能获得相同的输入,因为C#函数调用的工作方式).
所以,我不仅仅想从我的输出中删除该警告.我的问题的答案也解释了为什么首先将警告包含在库中,以及为什么我应该使用的方法更好.
我是XUnit和Moq的新手.我有一个方法,它将字符串作为参数.如何使用XUnit处理异常.
[Fact]
public void ProfileRepository_GetSettingsForUserIDWithInvalidArguments_ThrowsArgumentException() {
//arrange
ProfileRepository profiles = new ProfileRepository();
//act
var result = profiles.GetSettingsForUserID("");
//assert
//The below statement is not working as expected.
Assert.Throws<ArgumentException>(() => profiles.GetSettingsForUserID(""));
}
Run Code Online (Sandbox Code Playgroud)
正在测试的方法
public IEnumerable<Setting> GetSettingsForUserID(string userid)
{
if (string.IsNullOrWhiteSpace(userid)) throw new ArgumentException("User Id Cannot be null");
var s = profiles.Where(e => e.UserID == userid).SelectMany(e => e.Settings);
return s;
}
Run Code Online (Sandbox Code Playgroud) 我通过在Ruby中编写相当于Kent Beck的xUnit来扩展我的Ruby理解.Python(Kent写入)在语言中有一个assert()方法,该方法被广泛使用.Ruby没有.我认为应该很容易添加这个但是Kernel是正确的地方吗?
顺便说一下,我知道Ruby中存在各种单元框架 - 这是学习Ruby习语的练习,而不是"完成某些事情".
每个框架的优点和缺点是什么,相互比较?他们使用ASP.NET MVC的效果如何?他们支持嘲笑的程度如何?