java - 使继承的 getter 返回模拟对象

标签 java unit-testing testng mockito

我希望类 A 中继承的 getter 返回 MyObject 的 Mock。我怎样才能做到这一点而不直接 stub A 中的 getMyObject() 方法(即通过使用一些 MockBase 类)?

     public class Base {
         @Autowired
         private MyObject obj;
         public MyObject getMyObject(){
            return obj;
         }
     }


    public class A extends Base {
     @Autowired
     private SomeObject xyz; 

     public void myMethod(){
       MyObject  obj = getMyObject();
       //do something here
      }

    }

  public void MockBase {
      @Mock
      protected MyObject obj;

      public MyObject getMyObject(){
            return obj;
      }
  }

  public class ATest extends MockBase  {
    @InjectMocks
    private A a;

    @Mock
    private SomeObject xyz;


    @BeforeMethod
    public void setUp(){
        MockitoAnnotations.initMocks(this);
    } 

    public void MyMethod_SomeCondition_ExpectedResult{
       a.myMethod();
    }
   }

最佳答案

那里有什么问题?它按预期工作,也许您使用的是旧版本的 Mockito。以版本 1.9.5 为例:

这是您要测试的类的父类:

public class Base {
    private BaseObjectDependency base_object_dependency;

    public BaseObjectDependency getBase_object_dependency() {
        return base_object_dependency;
    }
}

这是您要测试的类:

public class Child extends Base {
    private ChildObjectDependency child_object_dependency;

    public void myMethod() {
        BaseObjectDependency obj = getBase_object_dependency();
        //do something here
    }

    public ChildObjectDependency getChild_object_dependency() {
        return child_object_dependency;
    }
}

以下是依赖项:

public class BaseObjectDependency { }

public class ChildObjectDependency { }

现在这是测试的父类:

import org.mockito.Mock;

public class MockBase {
    @Mock protected BaseObjectDependency base_test_dependency_mock;
}

最后是测试:

import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;

public class ChildTest extends MockBase {
    @InjectMocks private Child child;

    @Mock private ChildObjectDependency child_test_dependency_mock;


    @BeforeClass
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void check_that_mocks_are_correctly_injected() {
        assertNotNull(child.getBase_object_dependency());
        assertEquals(base_test_dependency_mock, child.getBase_object_dependency());

        assertNotNull(child.getChild_object_dependency());
        assertEquals(child_test_dependency_mock, child.getChild_object_dependency());
    }
}

你会发现我没有对 getBase_object_dependency() 进行 stub 。

关于java - 使继承的 getter 返回模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886452/

相关文章:

java - 如何将 List<String> 与 String 进行比较?

Java.lang.OutOfMemoryError : JAVA HEAP SPACE while converting xlsx to csv format. 我尝试了这个没有运气 <java-opts>-Xms400m -Xmx4096m</java-opts>

visual-studio - InternalsVisibleTo 似乎被忽略了

java - TestNG 注解-案例跳过

java - Spring Mockito TestNG - 模拟在测试中持续存在

java - POST 500(内部服务器错误) - AngularJS - Jersey API

java - Wiremock Stand alone - 如何使用请求数据操作响应

java - 如何检查异常的原因是否与异常类型匹配

php - 如果未调用所需的方法,Mockery/Etsy PHPExtensions 不会失败测试

java - org.testng.TestNGException : An error occurred while instantiating class