我有一個單元測試,我想測試一個特定的運行時異常發生。但是,似乎數據庫更改不會在測試類中的每個測試之間回滾,這是正常行爲(並且適用於所有其他測試)。Play Framework 2(Java)中的單元測試不回滾測試之間的變化
我試圖創建一個可以在下面看到的問題的最小例子。當運行TestTest
時,當您運行第二次測試時,您會從setUp()
方法中調用Unique index or primary key violation
到MyClass.create("abc")
。
問題似乎需要這種特定的設置:即使最輕微的變化也會使問題消失,如果交換兩個測試的名字;如果試圖簡化某些調用方法的方法等級;或者使用不是@Entity
的類或不使用@Transactional
的方法。
我簡直不明白這一點。誰能幫忙?
我正在使用Play Framework 2.2(Java版本)。
單元測試類:
public class TestTest extends WithApplication {
@Before
public void setUp() {
start(fakeApplication(inMemoryDatabase(), fakeGlobal()));
MyClass.create("abc");
}
@Test(expected = RuntimeException.class)
public void test1() {
MyClass c = MyClass.create("blabla");
c.foo();
}
@Test
public void test2() {
assert(true);
}
}
的MyClass實現:
@Entity
public class MyClass extends Model {
@Id
public Long id;
@Column(unique = true)
public String name;
private MyClass(String name) {
this.name = name;
}
public static MyClass create(String name) {
MyClass c = new MyClass(name);
c.save();
return c;
}
@Transactional(type = TxType.REQUIRED)
public void foo() {
Bar bar = new Bar();
bar.foo();
}
class Bar {
void foo() {
throw new RuntimeException();
}
}
}
其他測試是否也擴展'WithApplication'? –
是的,所有這些都可以。 – plade
你可以在沒有捕獲異常的情況下嘗試嗎?測試不應該捕獲異常;所有的測試運行器框架都足夠聰明,可以通過測試來拋出異常 –