java - 模拟一个具体的类——它总是空的

标签 java spring mocking mockito

我正在尝试使用 Mockito 模拟一个具体的类。但是,它在被测服务中仍然为空。

我的具体类和服务:

//My Concrete Class
@Component("supporter")
public class Supporter
{
   @Autowired
   private IDriver driver;
   public int someMethod(int){...}
   ...
}

//Service Class that uses this abstract class
public class Service implements IService
{
   private ExceptionHandler exceptionHandler;
   @Autowired
   public void setExceptionHandler(ExceptionHandler exceptionHandler) {
          this.exceptionHandler = exceptionHandler;
   }

   private Supporter supporter;
   @Autowired
   public void setSupporter(Supporter supporter) {
        this.supporter = supporter;
   }
   public int hookItem(int arg)
   {
      ...
      //supporter is always null while mock testing <----
      int count = supporter.someMethod(arg);
      ...
      return count;
   }
}

我的测试代码:

public class ServiceTest extends AbstractTestMockito
{
    ...
    IService service = null;
    @Mock
    private ExceptionHandler exceptionHandler;

    @BeforeMethod
    public void setup() {
        service = new Service();
    }

    @Test(enabled=true)
    public void shouldDoSomething()
    {
        Supporter supporter = Mockito.mock(Supporter.class);
        given(supporter.someMethod(1)).willReturn(new Integer(10));

        final int response = service.hookItem(1);
        //Assert...
    }
}

它为空的原因可能是什么? (我的类/服务是 Spring bean)

最佳答案

查看测试类,您似乎没有将模拟的 Supporter 实例注入(inject)到 service 实例中,例如尝试在调用 service.hookItem(1) 之前添加 service.setSupporter(supporter);

关于java - 模拟一个具体的类——它总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14694996/

相关文章:

c# - 我怎么 mock 这个?

java - 使用 sikuli-script.jar 时出现 Sikuli UnsatisfiedLinkError

java - 下面的配置是什么意思(jaxb-fluent-api)?

java - Jackson 自定义反序列化器打破了其他字段的反序列化

java - 如何将请求对象转换为Spring Webflux模型

java - 两个 @Transactional 是否在一个(同一) hibernate session 中执行?

python - 如何使用 unittest.mock 在单元测试中模拟任意 ConfigParser 调用

unit-testing - 测试和模拟一个不返回任何值的函数

java - 将编码的多个对象写入一个 xml 文件

java - 无法从 Java/Scala 控制台应用程序打开工作的 VIM 编辑器