代码之家  ›  专栏  ›  技术社区  ›  bbsimonbb

xunit测试web api 2控制器:引发xunit.Sdk.IsTypeException

  •  1
  • bbsimonbb  · 技术社区  · 10 年前

    我不想在webapi控制器上测试insert方法。该方法返回CreatedNegotiatedContentResult。一切都很好,直到断言。。。

    Assert.IsType(typeof(CreatedNegotiatedContentResult<Justif>), result);
    

    然后轰隆一声。。。

    Xunit.Sdk.IsTypeException was unhandled by user code
      Actual=System.Web.Http.Results.CreatedNegotiatedContentResult`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
      ActualTitle=Actual
      Expected=System.Web.Http.Results.CreatedNegotiatedContentResult`1[[HubHacienda.Justif, HubHacienda, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
      ExpectedTitle=Expected
      HResult=-2146233088
      Message=Assert.IsType() Failure
    Expected: System.Web.Http.Results.CreatedNegotiatedContentResult`1[[HubHacienda.Justif, HubHacienda, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
    Actual:   System.Web.Http.Results.CreatedNegotiatedContentResult`1[[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
      Source=xunit.assert
      UserMessage=Assert.IsType() Failure
      StackTrace:
           at Xunit.Assert.IsType(Type expectedType, Object object) in C:\BuildAgent\work\cb37e9acf085d108\src\xunit.assert\Asserts\TypeAsserts.cs:line 99
           at HubHacienda.Tests.JustifsControllerTest.Post_WhenModelValid_ShouldReturnSuccess() in C:\NotilusTNE\Sources\Hub\Hub Hacienda\Dev\HubHacienda\HubHacienda.Tests\JustifsControllerTests.cs:line 52
      InnerException: 
    

    这是我的测试框架崩溃了吗?这不可能是对的吗?

    1 回复  |  直到 10 年前
        1
  •  1
  •   bbsimonbb    10 年前

    好吧,这似乎是一个Xonit bug。问题是我正在比较一个形式为SystemType<的泛型类型;我的类型>。xunit项目中的typeof()运算符返回一个强名称,表示我的dll,而result。GetType()返回带有系统dll的强名称。

    解决方法是只比较Type.Name。。。

    System.Type expectation = typeof(System.Web.Http.Results.CreatedNegotiatedContentResult<Justif>);
    System.Type tristeRealite = result.GetType();
    Assert.Equal(expectation.Name, tristeRealite.Name);
    
    推荐文章