我觉得这很难解释,但我会尽量保持简单--我正在编写一个单元测试,其中函数(getQualityControlCheckDataForUplift())在另一个类中被访问,但是它确实进入了函数并执行了它应该做的事情,它直接得到了返回语句。
这就是功能。我是不是应该嘲笑QualityControlCheck,它是一个data class
我缩短了代码,使其变得清晰和易于理解。
在我的测试案例中,
qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()
showQualityControlChecks()getQualityControlCheckDataForUplift()进入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
}发布于 2020-05-01 15:49:09
方法没有执行,因为您模拟了类。
@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)
}
}https://stackoverflow.com/questions/61545028
复制相似问题