Q L*_*Liu 7 groovy logging unit-testing spock
所以我有一个类,它有一个记录消息的方法:
class Car {
private Logger logger = LoggerFactory.getLogger(Car.class);
void startCar() {
logger.error("car stopped working");
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用spock测试框架测试错误是否已记录?
class CarTest extends Specification {
def "test startCar"() {
given:
Car newCar = new Car();
when:
newCar.startCar();
then:
// HOW CAN I ASSERT THAT THE MESSAGE WAS LOGGED???
}
}
Run Code Online (Sandbox Code Playgroud)
cfr*_*ick 15
您可以检查记录器上的错误调用
@Grab(group='org.spockframework', module='spock-core', version='0.7-groovy-2.0')
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.7')
@Grab(group='ch.qos.logback', module='logback-classic', version='1.1.2')
import org.slf4j.Logger
class MockLog extends spock.lang.Specification {
public class Car {
private Logger logger = org.slf4j.LoggerFactory.getLogger(Car.class);
void startCar() {
logger.error('car stopped working');
}
}
def "mock log"() {
given:
def car = new Car()
car.logger = Mock(Logger)
when:
car.startCar()
then:
1 * car.logger.error('car stopped working')
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:完整示例https://github.com/christoph-frick/spock-test-logging
我的记录器是私有静态最终的,所以我不能使用上面提到的解决方案,而不是使用反射。
如果您使用 Spring,则可以访问 OutputCaptureRule。
@Rule
OutputCaptureRule outputCaptureRule = new OutputCaptureRule()
def test(){
outputCaptureRule.getAll().contains("<your test output>")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10007 次 |
| 最近记录: |