验证在单元测试中失败
Validate fails in unit tests
我是 运行 我的 PostMyModel
路线的单元测试。但是,在 PostMyModel()
中,我使用行 Validate<MyModel>(model)
在更改后重新验证我的模型。我正在使用测试上下文,以免单元测试依赖于数据库。我在下面 post 编辑了测试上下文和 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() { }
}
Post 方法
[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);
}
当 Validate<MyModel>(model)
行运行时,出现错误:
System.InvalidOperationException: ApiController.Configuration must not be null.
我该如何纠正?
为了 运行 的验证命令,必须有与控制器关联的模拟 HttpRequest。执行此操作的代码如下。这将模拟一个默认的 HttpRequest,在这种情况下它是相当未使用的,允许对该方法进行单元测试。
HttpConfiguration configuration = new HttpConfiguration();
HttpRequestMessage request = new HttpRequestMessage();
controller.Request = request;
controller.Request.Properties["MS_HttpConfiguration"] = configuration;
我是 运行 我的 PostMyModel
路线的单元测试。但是,在 PostMyModel()
中,我使用行 Validate<MyModel>(model)
在更改后重新验证我的模型。我正在使用测试上下文,以免单元测试依赖于数据库。我在下面 post 编辑了测试上下文和 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() { }
}
Post 方法
[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);
}
当 Validate<MyModel>(model)
行运行时,出现错误:
System.InvalidOperationException: ApiController.Configuration must not be null.
我该如何纠正?
为了 运行 的验证命令,必须有与控制器关联的模拟 HttpRequest。执行此操作的代码如下。这将模拟一个默认的 HttpRequest,在这种情况下它是相当未使用的,允许对该方法进行单元测试。
HttpConfiguration configuration = new HttpConfiguration();
HttpRequestMessage request = new HttpRequestMessage();
controller.Request = request;
controller.Request.Properties["MS_HttpConfiguration"] = configuration;