Ali*_*ned 6 c# unit-testing mstest
问题:我没有太多关于MSTest V2的示例或文档.使用Assert.ThrowsExceptionAsync的正确方法是什么?
public void GetPlaylistByIdAsync_NonExistingPlaylist_ThrowsPlaylistNotFoundException()
{
var playlistId = Guid.NewGuid().ToString();
var manager = PlaylistTargetsFakeFactory.GetPlaylistTargetFusionManager();
Assert.ThrowsException<PlaylistNotFoundException>(async () =>
{
await manager.GetPlaylistByIdAsync(playlistId);
});
}
Run Code Online (Sandbox Code Playgroud)
这也未通过测试:
Assert.ThrowsException<PlaylistNotFoundException>(() =>
{
return manager.GetPlaylistByIdAsync(playlistId);
});
Run Code Online (Sandbox Code Playgroud)
"消息:Assert.ThrowsException失败.没有抛出异常.预计会出现PlaylistNotFoundException异常."
这对我来说是失败的,即使我已经调试它并且确实抛出了异常.
由于这仍然是RC,因此可能存在错误.我在2次测试中有这个我试图转换所以我可以使用VS 2017.
更新:通过.
[TestMethod]
public async Task GetPlaylistByIdAsync_NonExistingPlaylist_ThrowsPlaylistNotFoundException()
{
var playlistId = Guid.NewGuid().ToString();
var manager = PlaylistTargetsFakeFactory.GetPlaylistTargetFusionManager();
//Assert.ThrowsException<PlaylistNotFoundException>(() =>
//{
try
{
await manager.GetPlaylistByIdAsync(playlistId);
Assert.Fail();
}
catch (PlaylistNotFoundException)
{
Assert.IsTrue(true);
}
//});
}
Run Code Online (Sandbox Code Playgroud)
更新2:在Stephen Cleary的回答之后,我做了这个改变.谢谢你指出我的误用.我已经改变了一段时间,因为我得到"消息:测试方法Daktronics.UserPortal.Test.Models.Helpers.PlaylistTargetFusionManagerTests.GetPlaylistByIdAsync_NonExistingPlaylist_ThrowsPlaylistNotFoundException引发异常:System.MissingMethodException:找不到方法:'System.Threading.Tasks.Task 1<!!0> Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsExceptionAsync(System.Func1)'. " 当我运行测试.
[TestMethod]
[TestCategory(TestCategories.CSharp)]
[TestCategory(TestCategories.PlaylistTargets)]
public async Task GetPlaylistByIdAsync_NonExistingPlaylist_ThrowsPlaylistNotFoundException()
{
var playlistId = Guid.NewGuid().ToString();
var manager = PlaylistTargetsFakeFactory.GetPlaylistTargetFusionManager();
await Assert.ThrowsExceptionAsync<PlaylistNotFoundException>(() => manager.GetPlaylistByIdAsync(playlistId));
}
Run Code Online (Sandbox Code Playgroud)
我的packages.json中有2个包
<package id="MSTest.TestAdapter" version="1.1.9-rc2" targetFramework="net451" />
<package id="MSTest.TestFramework" version="1.0.8-rc2" targetFramework="net451" />
Run Code Online (Sandbox Code Playgroud)
Ste*_*ary 15
使用Assert.ThrowsExceptionAsync的正确方法是什么?
你没打电话ThrowsExceptionAsync.你在打电话ThrowsException.调用的正确方法ThrowsExceptionAsync是await结果.
这应该工作:
public async Task GetPlaylistByIdAsync_NonExistingPlaylist_ThrowsPlaylistNotFoundException()
{
var playlistId = Guid.NewGuid().ToString();
var manager = PlaylistTargetsFakeFactory.GetPlaylistTargetFusionManager();
await Assert.ThrowsExceptionAsync<PlaylistNotFoundException>(async () =>
{
await manager.GetPlaylistByIdAsync(playlistId);
});
}
Run Code Online (Sandbox Code Playgroud)
或者,更简单地说:
await Assert.ThrowsExceptionAsync<PlaylistNotFoundException>(() =>
manager.GetPlaylistByIdAsync(playlistId));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2898 次 |
| 最近记录: |