.net 引发异常时出现FakeiTasy问题
我在用NUnit和FakeIteasy 我的测试方法:.net 引发异常时出现FakeiTasy问题,.net,uri,fakeiteasy,.net,Uri,Fakeiteasy,我在用NUnit和FakeIteasy 我的测试方法: [Test] public async Task SiteDetailsView_NMSException() { url = "/Svc/v1/Sites/GetNextID?UID=" + orgUID; A.CallTo(() => fake.GetDataAsync<int>(fakeHttpSession, url)).Throws(new Exception
[Test]
public async Task SiteDetailsView_NMSException()
{
url = "/Svc/v1/Sites/GetNextID?UID=" + orgUID;
A.CallTo(() => fake.GetDataAsync<int>(fakeHttpSession, url)).Throws(new Exception(new Uri(url),
new ExceptionDetail()
{
ErrorCode=ExceptionErrorCode.ParameterOutOfRange
Description="param OrganizationUID"
}));
// Act
var actionResult = await myController.DetailsView(UID, oName, oUID, isReadOnly);
var viewResult = actionResult as ViewResult;
// Assert
Assert.IsNotNull(actionResult);
}
My controller Code:
public async Task<ActionResult> DetailsView(int sUID, string oName, int oUID, bool isReadOnly)
{
try
{
SModel siModel = new SModel();
siModel .dite.Id = await _client.GetDataAsync<int>(Session, "/ManagementSvc/v1/ites/GetID?oUID=" + orgUID);
}
catch (Exception ex)
{
return View("Error", _plExceptionHandler.HandleException(ex));
}
}
}
如何使用FakeiTasy抛出NException
我想对错误消息进行断言
如何进行断言。您会得到
UriFormatException
,因为您原来的url
变量不是有效的URI。这就是为什么
.Throws(new NMSException(new Uri(url),
new NMSExceptionDetail()
{
ErrorCode=ExceptionErrorCode.ParameterOutOfRange
Description="param OrganizationUID"
}));
投掷。即使没有假货,你也能看到同样的东西:
var url = "/NMS/Platform/UserManagementSvc/v1/Sites/GetNextSiteID?organizationUID=" + 0;
new Uri(url);
要回答此处附带的其他一些问题,可以忽略第一个url,如下所示:
A.CallTo(() => nmsFake.GetNMSPlatformDataAsync<int>(fakeHttpSession, A<string>.Ignored))
A.CallTo(()=>nmsFake.GetNMSPlatformDataAsync(fakeHttpSession,A.Ignored))
如假文件所示
(顺便说一句,你应该去掉你的A.CallTo
s中的一个。我想你只是在尝试一些东西的时候放了第二个,所以也许你最终会从你的代码中去掉它。
在我讨论这个问题时,我鼓励您清理您的示例代码,使其尽可能小和有针对性,同时仍然重现问题。这有两个好处:
感谢您对忽略参数的帮助。我如何解决有关引发自定义异常类(NMSException)的另一个问题?由于解析Uri时出错,您可以停止解析
url
字符串(这意味着您需要一个nmsexceptiondeail
构造函数,该构造函数采用的不是Uri
),或在url
变量中构造一个有效的URI字符串。感谢您的建议,让我知道是否有任何方法可以忽略URI的url参数。因为我的所有异常情况都需要从中涵盖。我不确定您要问什么。为了构造NMSException
,您需要调用它的一个cons如果他们都解析一个URI字符串,那么他们需要被传递一个有效的URI字符串。如果你可以替换一个不同的异常类,我想你可以这样做。否则,因为NMSException
似乎是你自己的类,你可以提供一个替代的构造函数。但是你的m\u requestUri
字段可能会无效。为什么不在测试中只提供一个值URI字符串?请原谅。我错调了。NMSException类不分析该字符串,它只需要一个URI
。解析只在一个级别上进行。但其他所有内容都适用。
var url = "/NMS/Platform/UserManagementSvc/v1/Sites/GetNextSiteID?organizationUID=" + 0;
new Uri(url);
A.CallTo(() => nmsFake.GetNMSPlatformDataAsync<int>(fakeHttpSession, A<string>.Ignored))