【发布时间】:2020-02-13 15:37:28
【问题描述】:
我正在为一个函数编写一个 Junit4 测试,该函数具有基于其他函数设置的布尔变量。如何在我的测试用例中模拟这些布尔变量。
我正在测试的功能
private var operatorSigned = false
private var engineerSigned = false
override fun onValidationSucceeded() {
if (operatorSigned && engineerSigned) {
sendQualityControlCheck()
} else {
view.showToastMessage(app.getString(R.string.quality_control_signatures_not_complete))
}
}
这是设置值的方式
override fun signatureSigned(name: String, svgSignature: String, bitmapSignature: Bitmap, signatureType: SignatureType) {
val svgSignatureGzipped = CompressionTools.gzipCompress(svgSignature)
when (signatureType) {
SignatureType.OPERATOR -> {
operatorSignature = QualityControlSignature(svgSignatureGzipped, DateTime())
operatorSigned = true
view.operatorSignatureSigned()
}
SignatureType.ENGINEER -> {
engineerSignature = QualityControlSignature(svgSignatureGzipped, DateTime())
engineerSigned = true
engineerName = name
view.engineerSignatureSigned()
}
}
}
我的测试用例
@Test
fun `must show toast message when onValidationSucceeded is called and operatorSigned is false`() {
`when`(app.getString(R.string.quality_control_signatures_not_complete)).thenReturn("Operator and Engineer signature required")
presenter.onValidationSucceeded()
verify(view).showToastMessage("Operator and Engineer signature required")
}
我希望能够更改 operatorSigned 和 EngineerSigned 的值,我该怎么做。
【问题讨论】:
-
它们是如何设置的?在您发布的代码中,它们始终为
false。 (即如果它们在其他函数中设置,则调用其他函数进行设置)。 -
但它们基于太多其他参数
-
更新了我的问题
-
对我来说这似乎是一个类设计问题。如果您将签名代码作为自己的类并将其注入,则可能更容易测试
-
不要尝试测试“代码”。单元测试验证代码的public observable期望的行为。
标签: java android unit-testing kotlin junit