首页 > 解决方案 > 如何使用 ejp 无状态本地类在测试类中模拟私有静态 java.util.prefs.Preferences

问题描述

我想使用 mockito 编写测试类来测试带接口的无状态本地 ejb。

    public class SampleHandler{

        private static final Logger logger = Logger.getLogger(TLDHandler.class);

        @EJB
        private IMsAgent msAgent;

        public void setMsAgent(IMsAgent msAgent) {
            this.msAgent = msAgent;
        }

    public infoAvailability checkInfoAvailable(String sample){
        final URI url = msAgent.buildUrl(API_PREPEND_URL + sample + "/check");    
    }
}

    @Stateless
    @Local({IMsAgent.class})
        public class MsAgentImpl implements IMsTokenAgent {

        private static final String API_BASE_URL_PROPERTY_NAME = "API_BASE_URL";
        private static final String DEFAULT_API_BASE_URL = "https://stage.url.com/v1";
        private static Preferences preferences = Preferences.systemNodeForPackage(MsAgentImpl.class);

        @Override
        public URI getBaseUrl() {
            return URI.create(preferences.get(API_BASE_URL_PROPERTY_NAME, DEFAULT_API_BASE_URL));
        }
    }

我的测试班

@RunWith(MockitoJUnitRunner.class)
public class sampleTest {

    @Mock
    IMsAgent msAgent;

    @InjectMocks
    private SampleHandler sampleHandler = new SampleHandler();

    @Before
    public void setUp() {
      sampleHandler.setMsAgent(Mockito.mock(MsAgentImpl.class));
    }

    @Test
    public void checkInfoTest() throws Exception {
  final infoAvailability response = sampleHandler.checkInfoAvailable("sample");
    }
}

当我从 sampleTest 类控件运行 checkInfoTest 方法时,将转到 SampleHandler 类。在那个类中 url 变量总是返回空值。调试我的代码后,它永远不会转到 MsAgentImpl.getBaseUrl 方法。

标签: javaunit-testingejb

解决方案


推荐阅读