.net 引发异常时出现FakeiTasy问题

.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

我在用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));
             }
         }
     }
如何使用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))