一意の制約が正しく機能しているかどうかを検証するテストを追加するまで、正常に機能している単体テストの小さなセットがあります。これらは実際には単体テストではなく、統合テストです。
とにかく、一意の制約を検証するテストを省略した場合、すべてが削除で問題ありません。ただし、SerialNumberUniqueConstraint_Testメソッドを追加すると失敗し、削除が行われないため、アイテムクラスはnullになりません。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 ) );
}