抛出异常的问题

时间:2016-08-24 12:37:35

标签: .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(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

我想对错误消息进行断言。

我该怎么做断言。

1 个答案:

答案 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之一。我你只是把第二个放进去,而你尝试了一些东西,所以也许你会采取最终你的代码。 在讨论这个问题的同时,我建议您清理示例代码,使其尽可能小且有针对性,同时仍能重现问题。这有两个好处:

  1. 当事情变得更简单时,你可能会自己看到答案,
  2. 它使我们更容易理解您的代码并回答您的问题)