我正在使用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(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));
}
}
}
我收到错误
System.Uri.Format Exception : the format of URI cannot be determined.' at
A.CallTo(() => fake.GetDataAsync<int>(fakeHttpSession, url)).Throws(new SException(new Uri(url), new ExceptionDetail() { ErrorCode=ExceptionErrorCode.ParameterOutOfRange,Description="param OUID"}));
有没有办法忽略第一个(Uri)参数并抛出异常。 我也不能为第一个参数
传递null这是我的异常类:
public class NException : Exception
{
private readonly NExceptionDetail m_ExceptionDetails;
private readonly Uri m_requestUri;
public NException(Uri requestUri, nExceptionDetail nExceptionDetails)
{
if (requestUri == null)
throw new ArgumentNullException("requestUri");
m_requestUri = requestUri;
}
}
如何使用FakeItEasy抛出NException
。
我想对错误消息进行断言。
我该怎么做断言。
答案 0 :(得分:1)
您获得UriFormatException
,因为您的原始url
变量不是有效的URI。这就是
.Throws(new NMSException(new Uri(url),
new NMSExceptionDetail()
{
ErrorCode=ExceptionErrorCode.ParameterOutOfRange
Description="param OrganizationUID"
}));
抛出。即使没有FakeItEasy,你也可以看到同样的事情:
var url = "/NMS/Platform/UserManagementSvc/v1/Sites/GetNextSiteID?organizationUID=" + 0;
new Uri(url);
要回答您在此处捆绑的其他一些问题,您可以忽略这样的第一个网址:
A.CallTo(() => nmsFake.GetNMSPlatformDataAsync<int>(fakeHttpSession, A<string>.Ignored))
如FakeItEasy文档中的Ignoring Arguments所示。
(顺便说一下,你应该摆脱你的A.CallTo
之一。我想你只是把第二个放进去,而你尝试了一些东西,所以也许你会采取最终你的代码。
在讨论这个问题的同时,我建议您清理示例代码,使其尽可能小且有针对性,同时仍能重现问题。这有两个好处: