gpt4 book ai didi

java - 单元测试中未执行函数

转载 作者:行者123 更新时间:2023-12-01 16:58:51 25 4
gpt4 key购买 nike

我发现这很难解释,但会尽力使其尽可能简单我正在编写一个单元测试,其中在另一个类中访问一个函数(getQualityControlCheckDataForUplift()),但它确实进入该函数并执行其应该执行的操作,它直接返回语句。

这就是函数。我应该 mock QualityControlCheck 这是一个数据类

我缩短了代码,使其更加清晰且更易于理解

在我的测试用例中,

  • 我加载 MAP -qualityControlChecksDataProvider.loadMapWithQCChecksForMilestone()
  • 然后 orderStateMonitor 在测试用例中调用 orderStateMonitor.upliftedVolumeUpdated() 时访问该映射。哪个实习生通过 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)
}
}

订单状态监视器

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
}

最佳答案

该方法未执行,因为您模拟了该类

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

关于java - 单元测试中未执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com