У меня проблема с записью тестовых примеров с использованием SPOCK. Может ли кто-нибудь помочь мне?Как написать класс теста с переменной @Autowired для унаследованного класса
У меня есть классы & интерфейсы, как показано ниже,
//Helper class
public class ObjClass{
//Defining all property variables & corresponding getters & setters methods.
}
//Interface
public interface B{
//Declaring custom methods for Mongo repository.
public int getId();
}
public interface A extends MongoRepository<ObjClass, Serializable>, B{
//Defining some standard MongoRepository methods here
}
// Implementation Classes
public class Aimpl implements B{
//implementing all B interface methods
}
public class ctrlClass{
@Autowired
A aObj;
public int getIdValue(){
return aObj.getId();
}
}
И ниже соответствующие тестовые случаи SPOCK:
class test extends Specification
{
ctrlClass obj1
A obj2 //interface class object
def setup(){
obj1 = new ctrlClass();
obj2 = new Aimpl(); //Creating object for interface using impl class.
obj1.aObj = obj2
}
def "test"(){
when:
def a = obj2.getIdValue()
then:
//validating some conditions here with 'a' value
}
}
Попадая ниже ошибки при выполнении выше теста,
Нельзя лить объект Aimpl в класс A.
Тот же самый сценарий работает отлично с Spring @Autowired. Но не в Споке.
*
Есть ли альтернативный для @Autowired в SPOCK? Пожалуйста, предложите мне несколько решений & ваши комментарии.
*
Если я изменить как это, 'public class ctrlClass { @Autowired Aimpl aObj; public int getIdValue() { return aObj.getId(); } } ' Я не смогу использовать метод интерфейса A правильно ?. Примечание: Но в моей текущей структуре наследования я могу использовать методы интерфейса A и B. –