给出以下WebAPI方法:
public IHttpActionResult GetDeliveryTypes()
{
return Ok(... .Select(dt => new { Id = dt.Id, Name = dt.Name }));
}
哪里
typeof(Id) = long
typeof(Name) = string
在进行单元测试时,我该如何
断言内容是否符合我的预期?例如,以下断言失败
var contentResult = response as OkNegotiatedContentResult<IEnumerable<dynamic>>;
Assert.IsNotNull(contentResult);
将此IEnumerable<dynamic>
结果减少为IEnumerable<long>
,以便我可以验证它是否包含预期的值序列?
我已将InternalsVisibleTo
属性添加到AssemblyInfo。
答案 0 :(得分:4)
1。首先要做的事情:
@Bean
@Scope(SCOPE_PROTOTYPE)
public SynchronousRpcProxy myBean(MyObj1 notNull1, MyObj2 notNull2, MyNullable canBeNull) {
assert notNull1 != null;
assert notNull2 != null;
// assert canBeNull!= null; // this is not true because canBeNull can be null
return new SmthFromExternalLib(notNull1, notNull2, canBeNull); // do staff
}
如果需要,您可以从此处继续进行调查。
2。第二点的解决方案非常简单:
response.GetType().GetGenericTypeDefinition() == typeof(OkNegotiatedContentResult<>)
如果测试是在单独的程序集中 - 添加dynamic response = controller.GetDeliveryTypes();
Assert.True(response.GetType().GetGenericTypeDefinition() == typeof(OkNegotiatedContentResult<>));
var content = (IEnumerable<dynamic>)response.Content;
var ids = content.Select(i => i.Id).ToList();
,因为匿名类型是作为内部生成的。
答案 1 :(得分:0)
我只是使用反射来获取Content属性。
var response = controller.GetDeliveryTypes();
Assert.IsNotNull(response);
object content = response
.GetType()
.GetProperty("Content")
.GetValue(response);