我是Spock的新手,我有这个课,我想进行单元测试。在课堂上有一种验证产品的方法。要通过验证,产品必须具有fullPrice,并且必须包含所有其他价格,否则应抛出异常。
class PriceValidator {
private final Logger logger = Logger.getLogger(MyService.class)
void validate (Product product) throws SubsystemException {
if (!product.fullPrice || !product.fullPrice.priceInclVAT || !product.fullPrice.priceExclVAT || !product.fullPrice.vat) {
String message = "No price found!"
logger.error(message)
throw new SubsystemException(
Subsystem.MySystem,
FailureCause.NO_PRICE_FOUND,
message
)
}
}
}
我已经尝试过几种方式测试,没有任何运气。我猜我需要嘲笑,但这对我来说也是新的。这是我尝试过的一个测试示例,导致“测试框架意外退出”(并且所有价格都是字符串):
class PriceValidatorTest extends Specification {
@Unroll
def "No price should throw an exception"() {
given:
PriceValidator priceValidator = new PriceValidator()
Product product = Mock()
when:
product.fullPrice != null
product.fullPrice.priceInclVAT = "100"
product.fullPrice.priceExclVAT = "70"
product.fullPrice.vat = null
priceValidator.validate(product)
then:
thrown(SubsystemException)
}
}
有人建议如何测试PriceValidator吗?
答案 0 :(得分:0)
你需要测试几个案例,其中一个案例是:
def "No price should throw an exception"() {
given:
PriceValidator priceValidator = new PriceValidator()
Product product = Mock() {
getFullPrice() >> null
}
when:
priceValidator.validate(product)
then:
thrown(SubsystemException)
}
您需要做的是模拟 Product
类(带>>
rightShift运算符的行)的行为。似乎没有准备好接受测试。其他情况,当价格填补时,应采用单独的方法进行测试。还有其他问题吗?