Функция не выполняется в модульном тесте - PullRequest
0 голосов
/ 01 мая 2020

Мне сложно это объяснить, но я постараюсь сделать его как можно более простым. Я пишу модульный тест, в котором функция (getQualityControlCheckDataForUplift ()) доступна в другом классе, но она попадает в функцию и делает то, что ей нужно. Предполагается, что он напрямую возвращается к оператору возврата.

Это функция. Должен ли я издеваться над QualityControlCheck, который является data class

Я сократил код, чтобы сделать его немного яснее и легче следовать

В моем тестовом примере

  • Я загружаю MAP - qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone ()
  • Затем orderStateMonitor обращается к этой карте при вызове orderStateMonitor.upliftedVolumeUpdated () в тестовом примере. какой стажер обращается getQualityControlCheckDataForUplift() через showQualityControlChecks()
  • не может войти в getQualityControlCheckDataForUplift() не уверен, почему

любые предложения будут очень полезны, я действительно извиняюсь, если код не прост понять

   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
    } 

Мой тестовый пример

@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

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

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
}

1 Ответ

0 голосов
/ 01 мая 2020

Метод не выполнен, потому что вы издевались над классом

@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

@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)
    }
}
...