1
我有一小組單元測試工作正常,直到我添加一個測試來驗證我的唯一約束是否正常工作。這些不是真正的單元測試,而是集成測試。單元測試執行順序後db4o刪除不起作用
無論如何,如果我省略了驗證唯一約束的測試,那麼刪除就一切正常。但是,如果我添加SerialNumberUniqueConstraint_Test方法,它將失敗,並且我的項目類不爲空,因爲從不出現刪除。如果我將SerialNumberUniqueConstraint_Test移動到其他測試之前,那麼隨後的測試也將以相同的UniqueFieldValueConstraintValidationException失敗。我做錯了什麼?
[TestMethod]
[ExpectedException(typeof(UniqueFieldValueConstraintViolationException))]
public void SerialNumberUniqueConstraint_Test()
{
using(var logic = new ItemLogic())
{
logic.Save(CreateItem());
}
}
[TestMethod]
public void DeleteItem_Test()
{
Item item = null;
using(var logic = new ItemLogic())
{
logic.Delete(SerialNumber);
}
using(var logic = new ItemLogic())
{
item = logic.Retrieve(SerialNumber);
}
Assert.IsNull(item);
}
private Item CreateItem()
{
return new Item { Name = "My item", Make = "make", Model = "model", SerialNumber = "1234" };
}
public Item Save(Item item)
{
Db4oDatabase.Database.Store(item);
Db4oDatabase.Database.Commit();
return this.Retrieve(item.SerialNumber);
}
public Item Retrieve(string serialNumber)
{
Item item = (from i in Db4oDatabase.Database.AsQueryable<Item>()
where i.SerialNumber == serialNumber
select i).FirstOrDefault();
return item;
}
public void Delete(string serialNumber)
{
Db4oDatabase.Database.Delete(this.Retrieve(serialNumber));
}
什麼是'SerialNumber'?這是一堂課嗎? – 2013-03-17 22:20:46
順便說一句,你的測試應該是彼此獨立的。 'DeleteItem_Test'應該創建它將要刪除的項目,而不依賴於另一種測試方法。 – 2013-03-17 22:41:39
SerialNumber只是一個常量,因此當它們有意義時,所有測試都可以在數據庫中使用相同的項目。我在CreateItem中專門爲該帖子硬編碼了它。 – chad 2013-03-17 23:28:09