首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中不执行函数。

在单元测试中不执行函数。
EN

Stack Overflow用户
提问于 2020-05-01 15:03:01
回答 1查看 665关注 0票数 0

我觉得这很难解释,但我会尽量保持简单--我正在编写一个单元测试,其中函数(getQualityControlCheckDataForUplift())在另一个类中被访问,但是它确实进入了函数并执行了它应该做的事情,它直接得到了返回语句。

这就是功能。我是不是应该嘲笑QualityControlCheck,它是一个data class

我缩短了代码,使其变得清晰和易于理解。

在我的测试案例中,

qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()

  • I加载MAP -
  • ,然后在测试用例中调用orderStateMonitor.upliftedVolumeUpdated()时,orderStateMonitor访问该映射。哪个实习生通过showQualityControlChecks()
  • cannot访问getQualityControlCheckDataForUplift()进入getQualityControlCheckDataForUplift()不知道为什么

如果代码不容易理解的话,任何建议都会很有帮助,我真的很抱歉。

代码语言:javascript
复制
   fun getQualityControlCheckDataForUplift(qualityControlMilestone: QualityControlMilestone, uplift: Float):
        ArrayList<QualityControlCheck>? {
        val qcChecksForUplift: ArrayList<QualityControlCheck>? = ArrayList()
        val qcChecksForMilestone = mapOfQCChecksForMilestone[qualityControlMilestone.milestoneText]
        qcChecksForMilestone?.forEach {
            if (it.uplift == uplift) qcChecksForUplift?.add(it)
        }
        return qcChecksForUplift
    } 

我的测试用例

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner::class)
class OrderStateMonitorTest : BaseTest() {

 @InjectMocks
    private lateinit var orderStateMonitor: OrderStateMonitor
@Mock
    private lateinit var qualityControlCheckRequiredDuringFuellingBus: QualityControlCheckRequiredDuringFuellingBus
@Mock
    private lateinit var qualityControlChecksDataProvider: QualityControlChecksDataProvider


  @Before
    fun setUp() {
        qualityControlChecksDataProvider = QualityControlChecksDataProvider(offlineDataStorage, app)
    }
  @Test
    fun `upliftedVolumeUpdated abcdefg`() {

        qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()
        every(fuelOrderValuesProvider.upliftedVolume()).thenReturn(1000.0f)

        orderStateMonitor.upliftedVolumeUpdated()

        verify(qualityControlCheckRequiredDuringFuellingBus, never()).postUnavailable()
        verify(qualityControlCheckRequiredDuringFuellingBus, once()).postAvailable(qualityControlChecks)
    }
}

OrderStateMonitor

代码语言:javascript
复制
class OrderStateMonitor @Inject constructor(
    private val orderStorage: CurrentOrderStorage,
    private val fuelOrderValuesProvider: FuelOrderValuesProvider,
    private val noServiceRequiredAvailabilityBus: NoServiceRequiredAvailabilityBus,
    private val qualityControlCheckRequiredDuringFuellingBus: QualityControlCheckRequiredDuringFuellingBus,
    private val qualityControlChecksDataProvider: QualityControlChecksDataProvider
) {
     fun upliftedVolumeUpdated() {
        showQualityControlChecks()
    }

       private fun showQualityControlChecks() {
           // WHEN I TRY TO ACCESS ` //qualityControlChecksDataProvider.getQualityControlCheckDataForUplift` IT DOES NOT GET INTO THAT FUNCTION
              val qualityControlChecks =
                qualityControlChecksDataProvider.getQualityControlCheckDataForUplift(
                    QualityControlMilestone.FUELLING, 1000.0f)
    }
}

QualityControlChecksDataProvider

代码语言:javascript
复制
class QualityControlChecksDataProvider @Inject constructor(
    private val offlineDataStorage: OfflineDataStorage,
    private val app: App
) {
    private val mapOfQCChecksForMilestone = LinkedHashMap<String, ArrayList<QualityControlCheck>?>()

    fun loadMapWithQCChecksForMilestone() {
        QualityControlMilestone.values().forEach {
            mapOfQCChecksForMilestone.put(it.milestoneText, getQualityControlCheckDataForMilestone(it))
        }
    }

    fun getQualityControlCheckData(qualityControlMilestone: QualityControlMilestone):
        ArrayList<QualityControlCheck>? =
        mapOfQCChecksForMilestone[qualityControlMilestone.milestoneText]

    fun getQualityControlCheckDataForUplift(qualityControlMilestone: QualityControlMilestone, uplift: Float):
        ArrayList<QualityControlCheck>? {
       //DOES NOT GET INTO THIS FUNCTION  I RUN THE TEST CASE
        val qcChecksForUplift: ArrayList<QualityControlCheck>? = ArrayList()
        val qcChecksForMilestone = mapOfQCChecksForMilestone[qualityControlMilestone.milestoneText]
        qcChecksForMilestone?.forEach {
            if (it.uplift == uplift) qcChecksForUplift?.add(it)
        }
        return qcChecksForUplift
    }
  //THERE ARE OTHER PRIVATE FUNCTION WHICH THE ABOVE CODE WILL ACCESS WHICH WORK FINE
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-01 15:49:09

方法没有执行,因为您模拟了类。

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner::class)
class OrderStateMonitorTest : BaseTest() {

 @InjectMocks
    private lateinit var orderStateMonitor: OrderStateMonitor
@Mock
    private lateinit var qualityControlCheckRequiredDuringFuellingBus: QualityControlCheckRequiredDuringFuellingBus

    private lateinit var qualityControlChecksDataProvider: QualityControlChecksDataProvider


  @Before
    fun setUp() {
        qualityControlChecksDataProvider = spy(QualityControlChecksDataProvider(offlineDataStorage, app))
    }
  @Test
    fun `upliftedVolumeUpdated abcdefg`() {

        qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()
        every(fuelOrderValuesProvider.upliftedVolume()).thenReturn(1000.0f)

        orderStateMonitor.upliftedVolumeUpdated()

        verify(qualityControlCheckRequiredDuringFuellingBus, never()).postUnavailable()
        verify(qualityControlCheckRequiredDuringFuellingBus, once()).postAvailable(qualityControlChecks)
    }
}

或者使用CALL_REAL_METHOD

代码语言:javascript
复制
@RunWith(MockitoJUnitRunner::class)
class OrderStateMonitorTest : BaseTest() {

 @InjectMocks
    private lateinit var orderStateMonitor: OrderStateMonitor
@Mock
    private lateinit var qualityControlCheckRequiredDuringFuellingBus: QualityControlCheckRequiredDuringFuellingBus

    private lateinit var qualityControlChecksDataProvider: QualityControlChecksDataProvider

// java syntax
@before
public void setUp(){
  qualityControlChecksDataProvider = mock(QualityControlChecksDataProvider, Mocktio.CALL_REAL_METHOD);
}

  @Test
    fun `upliftedVolumeUpdated abcdefg`() {
        qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()
        every(fuelOrderValuesProvider.upliftedVolume()).thenReturn(1000.0f)

        orderStateMonitor.upliftedVolumeUpdated()

        verify(qualityControlCheckRequiredDuringFuellingBus, never()).postUnavailable()
        verify(qualityControlCheckRequiredDuringFuellingBus, once()).postAvailable(qualityControlChecks)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61545028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档