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

如何用@Resource对布尔字段进行单元测试

魏航
2023-03-14

我想测试一些类。那个类有@resource的布尔字段。我不能模拟这个字段。因此,它的测试失败了一些错误。如果有人能告诉我如何测试这个类。

这是我的java类

public class RefreshHandlerImpl implements RefreshHandler
{
  @Resource(name = "readOnlyMode")
  private Boolean readOnlyMode;


  @Override
  public ContactBedRefreshResult refreshContactsAndBeds(final Unit unit, final boolean hasWritableTransaction)
throws RequiresWritableTransactionException
  {

    if (!isReadOnlyMode())
    {
      //some code here
    }

  }



  private boolean isReadOnlyMode()
  {
    return readOnlyMode;
  }

}

我试图模拟“ReadOnlyMode”字段,但它给出了错误。

org.Mockito.exceptions.base.mockitoException:不能mock/spy类java.lang.Boolean Mockito不能mock/spy如下:-最终类-匿名类-原语类型

这是我的testng测试类

public class RefreshHandlerImplTest
{

 @Mock(name = "readOnlyMode")
 private Boolean readOnlyMode;

 @InjectMocks
 private RefreshHandlerImpl refreshHandlerImpl;

 @BeforeMethod
 public void setUp() throws Exception {
   initMocks(this);
 }

 @Test
 public void testRefreshContactsAndBeds_ReturnsZeroContactsWhenCollaboratorsDoes()
  throws Exception
 {
   ContactBedRefreshResult result = refreshHandlerImpl.refreshContactsAndBeds(unit, true);
   assertThat(result.getContacts()).isEmpty();
 }
}

我可以使用反射,然后它如何使用?我不能改变我的java类,只能改变测试类。

共有1个答案

慕容昊焜
2023-03-14

我使用org.springframework.test.util.ReflectionTestUtils修复了这个问题

我删除了@mock(name=“readonlymode”)私有布尔readonlymode;并在我的@beforeMethod方法中使用了reflectiontestutils.setfield(refreshHandlerImpl,refreshHandlerImpl.class,“readonlymode”,true,Boolean.class);。这是我的测试课,

public class RefreshHandlerImplTest
{
 @InjectMocks
 private RefreshHandlerImpl refreshHandlerImpl;

 @BeforeMethod
 public void setUp() throws Exception {
  initMocks(this);
  ReflectionTestUtils.setField(refreshHandlerImpl,RefreshHandlerImpl.class,"readOnlyMode",true,Boolean.class);
 }

 @Test
 public void testRefreshContactsAndBeds_ReturnsZeroContactsWhenCollaboratorsDoes() throws Exception
 {
   ContactBedRefreshResult result = 
   refreshHandlerImpl.refreshContactsAndBeds(unit, true);
   assertThat(result.getContacts()).isEmpty();
 }
}
 类似资料:
  • 我还在学习酶和材料的反应。 我有一个包含Material-ui的TextField的组件,我想对以下情况进行单元测试。 当用户在屏幕上的文本字段上输入字符串“123”时,文本字段应将“错误”设置为“true”,并显示消息“错误的名称格式”。 成分 单元测试 我得到以下错误。错误:期望(收到). toBe(期望)//Object.is相等 预期:true收到:false 我做错了什么吗?

  • 问题内容: 如何在单元测试中测试 hashCode()函数? 问题答案: 每当我覆盖equals和hash代码时,我都会按照Joshua Bloch在“ Effective Java”第3章中的建议编写单元测试。我确保equals和hash代码是自反的,对称的和可传递的。我还确保“不等于”对所有数据成员均正常工作。 当我检查对equals的调用时,我还要确保hashCode的行为符合预期。像这样:

  • 问题内容: 我一直在学习AngularJS,并且在单元测试方面进展非常顺利,但是我遇到了一个棘手的问题。 假设我有一个简单的表格,例如: 如果我正在测试类似控制器的东西,我知道我会这样写(使用Jasmine + Karma): 但是我不知道我需要注入哪些服务,也没有运气在指南或文档中找到有关单元测试的文档。 一个单元如何在Angular中测试表单? 问题答案: 我不认为这是对此类内容进行单元测试的

  • 本文向大家介绍对Angular.js Controller如何进行单元测试,包括了对Angular.js Controller如何进行单元测试的使用技巧和注意事项,需要的朋友参考一下 一、写个简单的Angular App 在开始写测试之前,我们先写一个简单的计算App,它会计算两个数字之和。 代码如下: 二、简单说说里面涉及的一些基本概念: 创建一个 module 什么是angular.modul

  • 问题内容: 如您所知,异常情况下会引发异常。那么如何模拟这些异常呢?我觉得这是挑战。对于此类代码段: 有人有好主意吗? 问题答案: 其他答案已经解决了如何编写用于检查是否引发异常的单元测试的一般问题。但是我认为您的问题实际上是在询问如何获取代码以首先引发异常。 以您的代码为例。在简单的单元测试的环境中,很难在内部引发异常。问题是,为了使异常发生,代码(通常)需要在网络中断的计算机上运行。安排在单元

  • 在探索如何对Kafka流进行单元测试时,我遇到了,不幸的是,这个类似乎被版本(KAFKA-4408)破坏了 对于KTable的问题,是否有一个解决方案? 我看到了“mocked streams”项目,但首先它使用的是,而我使用的是,其次它是Scala,而我的测试是Java/Groovy。 这里的任何关于如何在不需要引导zookeeper/kafka的情况下对流进行单元测试的帮助都将非常棒。 注意: