[英]Unit testing with WebAPI odata
我正在尝试从基于WebAPI的REST服务转移到包含OData新实现的服务。 我的服务正常运行,但是在如何创建可测试odata查询选项的单元测试方面迷茫。
在对WebAPI方法进行单元测试时,我习惯于构建httpRequestMessage并将其注入到结构中:
var request = new HttpRequestMessage();
request.Headers.Add("UserName", "TestUser");
request.Headers.Add("Password", password);
request.Headers.Add("OverRideToken", "false");
request.Headers.Add("AccessSystem", "Mobile");
request.Headers.Add("Seed", "testSeed");
var token = new Token();
var authController = new AuthorizationController(request);
try
{
var returnValue = authController.Get();
我将如何注入odata请求? 我需要验证$ filter,$ inlinecount和其他选项是否返回了正确的记录。
您可以测试控制器,也可以针对正在运行的Web API实例进行测试(您可能应该两者都进行)。
测试您的控制器将无法实现您想要做的事情,因此您将需要通过创建Web API应用程序的自托管内存中实例进行测试。 然后,您可以在测试类中使用HttpClient(必须手动构造OData请求),也可以在测试类中使用WCF数据服务客户端(这将允许您通过LINQ查询)。
这是使用WCF数据服务客户端的示例:
public class ODataContainerFactory
{
static HttpSelfHostServer server;
public static MyApplicationServer.Acceptance.ODataService.Container Create(Uri baseAddress)
{
var config = new HttpSelfHostConfiguration(baseAddress);
// Remove self host requirement to run with Adminprivileges
config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact;
// Register Web API and OData Configuration
WebApiConfig.Register(config);
// Configure IoC
ConfigureIoC(dataSource, config);
// Do whatever else, e.g. setup fake data sources etc.
...
// Start server
server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
// Create container
var container = new MyApplicationServer.Acceptance.ODataService.Container(new Uri(baseAddress.ToString() + "odata/"));
// Configure container
container.IgnoreResourceNotFoundException = true;
container.IgnoreMissingProperties = true;
return container;
}
private static void ConfigureIoC(MockDatasource dataSource, HttpSelfHostConfiguration config)
{
var container = new UnityContainer();
container.RegisterType<TypeA, TypeB>();
...
...
config.DependencyResolver = new IoCContainer(container);
}
public static void Destroy()
{
server.CloseAsync().Wait();
server.Dispose();
}
}
此处的关键是WebApiConfig.Register(HttpConfiguration config)方法调用,该方法正在调用您的Web API项目。
请注意,在执行上述操作之前,您需要:
这将创建一个Container对象(在上面的示例MyApplicationServer.Acceptance.ODataService.Container中),您可以使用该对象在测试中查询OData feed,如下所示:
var odataContainer = ODataContainerFactory.Create(new Uri("http://localhost:19194/");
var result = odataContainer.MyEntities
.Expand(s => s.ChildReferenceType)
.Where(s => s.EntityKey == someValue).SingleOrDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.