Hẹn giờ đầu tiên ở đây, xin lỗi nếu tôi đã bỏ lỡ bất cứ điều gì. Tôi hy vọng có được một cuộc gọi đến một phương pháp tĩnh bằng cách sử dụng Spock. Phản hồi sẽ tuyệt vờiGiả lập phương pháp tĩnh với GroovyMock hoặc tương tự trong Spock
Với mock groovy, tôi nghĩ tôi có thể vượt qua cuộc gọi tĩnh nhưng chưa tìm thấy. Đối với nền, tôi đang trong quá trình trang bị lại các thử nghiệm trong java cũ. Tái cấu trúc bị cấm. Tôi đang sử dụng spock-0.7 với groovy-1.8.
Các cuộc gọi đến phương thức tĩnh được xích với một cuộc gọi dụ trong hình thức này:
public class ClassUnderTest{
public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
}
}
staticMethod trả về một thể hiện của ClassWithStatic instanceMethod trả về Thing cần thiết trong phần còn lại của phương pháp
Nếu Tôi trực tiếp thực hiện mô hình toàn cầu, nó trả về trường hợp giả mạo ok:
def exerciseTheStaticMock(){
given:
def globalMock = GroovyMock(ClassWithStatic,global: true)
def instanceMock = Mock(ClassWithStatic)
when:
println(ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(testParam))
then:
interaction{
1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
1 * instanceMock.instanceMethod(_) >> returnThing
}
}
Nhưng nếu tôi chạy metho dUnderTest từ ClassUnderTest:
def failingAttemptToGetPastStatic(){
given:
def globalMock = GroovyMock(ClassWithStatic,global: true)
def instanceMock = Mock(ClassWithStatic)
ClassUnderTest myClassUnderTest = new ClassUnderTest()
when:
myClassUnderTest.methodUnderTest(testParam)
then:
interaction{
1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
1 * instanceMock.instanceMethod(_) >> returnThing
}
}
Nó ném xuống một trường hợp thực sự của ClassWithStatic không hoạt động trong instanceMethod của nó.
Nếu giúp ai đó, tôi đang sử dụng GroovyMock in Spock để thay đổi các phương thức tĩnh trong mã Java, nhưng điều này ảnh hưởng sai đến các thử nghiệm khác. Tôi đã sử dụng chú thích này để khắc phục sự cố @ConfineMetaClassChanges – Topera