ste*_*ris 9 .net c# post unit-testing asp.net-web-api
我正在对我的PostMyModel路线进行单元测试.但是,在PostMyModel()我Validate<MyModel>(model)更改后使用该行重新验证我的模型.我正在使用测试上下文,以便不依赖于单元测试的数据库.我已经发布了下面的测试上下文和post方法:
测试环境
class TestAppContext : APIContextInterface
{
public DbSet<MyModel> MyModel { get; set; }
public TestAppContext()
{
this.MyModels = new TestMyModelDbSet();
}
public int SaveChanges(){
return 0;
}
public void MarkAsModified(Object item) {
}
public void Dispose() { }
}
Run Code Online (Sandbox Code Playgroud)
发布方法
[Route(""), ResponseType(typeof(MyModel))]
public IHttpActionResult PostMyModel(MyModel model)
{
//Save model in DB
model.status = "Waiting";
ModelState.Clear();
Validate<MyModel>(model);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.MyModels.Add(model);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (MyModelExists(model.id))
{
return Conflict();
}
else
{
throw;
}
}
return CreatedAtRoute("DisplayMyModel", new { id = model.id }, model);
}
Run Code Online (Sandbox Code Playgroud)
当该Validate<MyModel>(model)行运行时,我收到错误:
System.InvalidOperationException: ApiController.Configuration must not be null.
Run Code Online (Sandbox Code Playgroud)
我怎么能纠正这个?
ste*_*ris 21
为了运行Validate命令,必须有与控制器关联的模拟HttpRequest.执行此操作的代码如下.这将模拟默认的HttpRequest,在这种情况下它是相当未使用的,允许对方法进行单元测试.
HttpConfiguration configuration = new HttpConfiguration();
HttpRequestMessage request = new HttpRequestMessage();
controller.Request = request;
controller.Request.Properties["MS_HttpConfiguration"] = configuration;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |