当前位置: 首页 > 知识库问答 >
问题:

如何在groovy spock中模拟Autowired构造函数依赖

程磊
2023-03-14
@Service
public class ServiceA {

private final PrincipalDao principalDao;
    @Autowired
    public ServiceA(final PrincipalDao principalDao){
        this.principalDao=principalDao;
        this.serviceMap = getMap();           
    }
            
    private Map<> getMap() {
        final List<ClassA> classAList = principalDao.findAll(); //this line returns null
       
    }       
}
    
principalDao.findAll() >> list

共有1个答案

司迪
2023-03-14

如果没有看到单元测试,很难判断问题是什么,但我有时遇到的一个常见误解是模拟的时间。

下面的示例代码详细说明了我的意思。因为您的问题中缺少部分代码,所以我将假设其中的某些部分,但我确信它解释了我所提出的观点,并希望能够帮助您找到答案:

服务类别:

@Service
public class ServiceA{

  private final PrincipalDao principalDao;
  private final Map<String, String> serviceMap;

  @Autowired
  public ServiceA(final PrincipalDao principalDao){
    this.principalDao = principalDao;
    this.serviceMap = getMap();
  }

  private Map<String, String> getMap(){
    final HashMap<String, String> stringStringHashMap = new HashMap<String, String>();
    stringStringHashMap.put("hello", principalDao.khello());
    return stringStringHashMap;
  }

  public String printServiceMap() {
    return serviceMap.get("hello");
  }
}
class ServiceATest extends Specification {

  def "some test"() {
    given:
    PrincipalDao principalDao = Mock()
    principalDao.khello() >> "khello" // this is the key here. Mocking is happening before instantiation of ServiceA
    ServiceA someService = new ServiceA(principalDao)

    expect:
    "khello" == someService.printServiceMap()
  }
}
class ServiceATest extends Specification {

  @Shared
  PrincipalDao principalDao = Mock()
  ServiceA someService = new ServiceA(principalDao)

  def setupSpec() {
    principalDao.khello() >> "khello"
  }

  def "some test"() {
    expect:
    "khello" == someService.printServiceMap()
  }
}
 类似资料:
  • 问题内容: 我正在尝试第一次使用PowerMockito模拟类构造函数,但是它不起作用。我当前的代码是: 测试失败,因为返回的值为“ Fail”。我的问题在哪里? 问题答案: Okey,找到答案了,您需要致电 代替

  • 问题内容: 我想将构造函数模拟为方法。 在我的测试中,我想做这样的事情: 但是给我这个 错误 知道为什么吗? 问题答案: 您可以使用PowerMock模拟构造函数。 如果由于某种原因而无法使用PowerMock,则最可行的解决方案是将工厂注入到包含此方法的任何类中。然后,您将使用工厂创建对象并模拟工厂。

  • 我正在为我的java类编写测试类。我将Junit5与Mockito一起使用。 我使用的Junit5与Power Mockito不兼容,所以我只使用Mockito。 我有,它具有下面这样的函数,并且在构造函数中初始化了。 当我编写测试用例时,我模拟了,但是由于我们在一个方法中创建,我如何模拟,这样我就可以编写期望值,根据我在测试类中设置的选择获得值?

  • 问题内容: 我的课如下: 在构造函数中的逻辑和是我试图嘲弄的事情。我想要任何调用:返回一个虚拟字符串。 我试过了: 但这似乎不起作用。仍在执行构造函数逻辑,而不是获取的模拟对象。 问题答案: 您发布的代码适用于最新版本的Mockito和Powermockito。也许您还没有准备A?试试这个: A.java MockA.java 两项测试均应通过Mockito 1.9.0,powermockito

  • 我是莫基托的新手。假设我有一节这样的课 我正在使用Mockito编写一个JUnit测试,我正在使用构造函数创建类的对象。当我安装类时,是否可以模拟Drew()方法?

  • 我一直试图模仿我的服务/业务类来开始测试我的应用程序,但有许多对其他类的“依赖”,主要是存储库和传递给这些存储库的存根。为了能够对我的服务进行单元测试,我一直试图设置它,但我不断地得到错误,我真的不知道我的设置是否正确: 我没有包括接口,因为我觉得没有必要,但如果需要,可以。 但正如您所看到的,我需要传递2个模拟存储库,它们自己是从一个模拟的“存根”实例化的,这就是我的问题。 我尝试过许多不同的方