고유 제한이 제대로 작동하는지 확인하는 테스트를 추가 할 때까지 제대로 작동하는 단위 테스트 세트가 있습니다. 이것은 실제로 단위 테스트가 아니며 통합 테스트입니다.단위 테스트 실행 시퀀스 후 db4o 삭제가 작동하지 않습니다.
필자는 고유 제약 조건의 유효성을 검사하는 테스트를 생략하면 모두 삭제와 잘 일치합니다. 그러나 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));
}
'SerialNumber'란 무엇입니까? 그게 수업인가요? –
그건 그렇고, 당신의 테스트는 서로 독립적이어야합니다. 'DeleteItem_Test'는 다른 테스트 메소드에 의존하지 않고 삭제하려고하는 것과 동일한 아이템을 생성해야합니다. –
SerialNumber는 단지 const이므로 모든 테스트가 DB에있는 동일한 항목과 함께 작동하는 것이 이해가되면 DB에서 작동합니다. 나는 특히 게시물에 대한 CreateItem에서 하드 코드했습니다. – chad