我需要在我的测试项目的odata控制器中测试以下Patch方法。
[ValidateModel]
[AcceptVerbs("PATCH", "MERGE")]
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<User> patch)
{
var user = await db.Users.FindAsync(key);
if (user == null)
{
return NotFound();
}
patch.Patch(user);
Validate(user);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
try
{
db.Entry(user).Property(p => p.UserType).IsModified = false;
await db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!UserExists(key))
{
return NotFound();
}
throw;
}
return Updated(user);
}
测试项目中的代码如下。有人能告诉我如何将值传递给Delta参数。目前我在线控制器上获得编译错误。补丁(1,用户);。
[TestMethod]
public void TestPatch()
{
// Arrange
var controller = new UsersController();
var user = new User();
user.Id = 1;
user.Lastname = "Johanson";
// Act
controller.Patch(1, <System.Web.OData.Delta> user);
// Assert
}
答案 0 :(得分:5)
您还可以使用dynamic关键字声明delta并直接设置属性:
dynamic delta = new Delta<User>();
delta.Id = 1;
delta.Lastname = "Johanson";
答案 1 :(得分:4)
var delta = new Delta<User>(typeof(User));
delta.TrySetPropertyValue("Id", 1);
delta.TrySetPropertyValue("Lastname", "Johanson");
我不知道是否有任何帮助使这更容易
答案 2 :(得分:3)
@ yenta的回答非常好,但如果可以,也可以考虑使用nameof
(自C#6.0以来)
var delta = new Delta<User>(typeof(User));
delta.TrySetPropertyValue(nameof(User.Id), 1);
delta.TrySetPropertyValue(nameof(User.Lastname), "Johanson");