我的from fabric.api import *
env.run = local
env.hosts = ["docker.me"] # change this!
@task
def remote():
env.run = run
@task
def build_file():
env.run("echo 'make image'")
env.run("echo 'upload image'")
@task
def deploy_file():
env.run("echo 'reload image'")
@task
def do_all():
build_file()
remote()
deploy_file()
课程中有以下方法:
BaseApiController
我正在将public virtual HttpResponseMessage GetById(int id)
{
var entity = repository.GetById(id);
if (entity == null)
{
var message = string.Format("No {0} with ID = {1}", GenericTypeName, id);
return ErrorMsg(HttpStatusCode.NotFound, message);
}
return Request.CreateResponse(HttpStatusCode.OK, SingleResult.Create(repository.Table.Where(t => t.ID == id)));
}
用于OData请求(因为如果我没有创建SingleResult,单个实体的SingleResult
不起作用)。
但是现在我在具体控制器(例如AddressApiController)上遇到了这种方法的UnitTests问题。我总是得到$expand
结果:
NULL
我检查并调试了[TestMethod]
public void Get_By_Id()
{
//Arrange
var moq = CreateMockRepository();
var controller = new AddressApiController(moq);
controller.Request = new HttpRequestMessage()
controller.Request.SetConfiguration(new HttpConfiguration())
// Action
HttpResponseMessage response = controller.GetById(1);
var result = response.Content.ReadAsAsync<T>().Result;
// Accert
Assert.IsNotNull(result);
}
并发现GetById()
返回了正确的值,但在repository.Table.Where(t => t.ID == id))
后我得到SingleResult.Create
。
我该如何解决这个问题?如何阅读SingleResult中的内容或使用其他内容?
答案 0 :(得分:0)
我没有机会模仿api,但是来自这里的文档:
以下是方法签名的一些规则:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-routing-conventions
尝试将id
更改为key
和属性,然后您可能不需要使用SingleResult
。
我很想知道这是否会改变测试结果。
答案 1 :(得分:0)
我创建了扩展程序:
public static class HttpResponseMessageExtensions
{
public static IQueryable<T> ContentToQueryable<T>(this HttpResponseMessage response) where T : BaseEntity
{
var objContent = response.Content as ObjectContent;
return objContent?.Value as IQueryable<T>;
}
public static T ContentToEntity<T>(this HttpResponseMessage response) where T : BaseEntity
{
var objContent = response.Content as ObjectContent;
return objContent?.Value as T;
}
}
然后:
var result = response.ContentToEntity<T>();