我能够在服务器上使用以下代码,但不能在单元测试中使用。在单元测试中,简单属性设置正确,但子对象不正确。我一直在墙上敲打太久,所以欢迎任何建议。
[HttpPost]
public bool Save(int id)
{
var itemFromRepository = this.itemRepository.FetchById(id);
if (itemFromRepository != null)
{
this.TryUpdateModel(
itemFromRepository,
"Item",
new[] {
"AnIntProperty",
"AStringProperty",
"Category.Id"
});
if (itemFromRepository.Category!= null)
{
itemFromRepository.Category= this.categoryRepository.FetchById(itemFromRepository.Category.Id);
}
if (ModelState.IsValid)
{
this.itemRepository.Update(itemFromRepository);
return true;
}
}
return false;
}
this._controller.ControllerContext = new ControllerContext();
Item item = this.items.First();
var updatedCategory = this.categories.Last();
var updatedStringProperty = "Fake Value";
var updatedIntProperty = 4;
var formValues = new FormCollection {
{ "Item.AnIntProperty", updatedStringProperty},
{ "Item.Category.Id", updatedCategory.Id.ToString() },
{ "Item.AStringProperty", updatedIntProperty.ToString() }
};
var result = this._controller
.WithIncomingValues(formValues)
.Save(item.Id);
通过:
Assert.That(
item.AStringProperty,
Is.EqualTo(updatedStringProperty));
Assert.That(
item.AnIntProperty,
Is.EqualTo(updatedIntProperty));
这不是:
Assert.That(
item.Category,
Is.Not.Null);
Assert.That(
item.Category.Name,
Is.EqualTo(updatedCategory.Name));
答案 0 :(得分:0)
您是否检查过以前的类别是否为空?在以下代码中,只更新值,如果它不为null,则在两种情况下可以为category获取null值。 1.如果值当前为null,则可能为categoryRepository.FetchById返回空引用。
if (itemFromRepository.Category!= null)
{
itemFromRepository.Category= this.categoryRepository.FetchById(itemFromRepository.Category.Id);
}
这两种情况都会导致你的断言失败。