我们有一个ServletFilter,我们想用Spock进行单元测试,并检查对HttpServletRequest的调用。
下面的代码抛出java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/http/Cookie
def "some meaningless test"(){
given:
HttpServletRequest servletRequest = Mock(Http
我使用用Groovy编写的Spock测试来测试一些Java代码。我使用JMockit来模拟java代码中的方法,因为Spock只处理模拟Groovy类。我遇到了一个问题,一个JMockit MockUp在测试之间持久化。这样的模拟实例应该只存在于测试(每个JMockit文档),但这是行不通的,我认为这是因为它没有使用JMockit测试运行程序,而是使用了JMockit测试运行程序。
这是我所面临问题的最简单的例子。我有一个返回字符串的简单方法,我可以用MockUp更改方法的返回值,但是对于第三个测试,它仍然存在,这并不期望它被使用。
Java类
public class ClassToTest
我有使用groovy spock编写的java代码和测试。通常,测试遵循以下模式 我的示例Java代码 public User findUser(String id){
return userRepo.findById(id);
} 我的样本测试 def "My Test"(){
given:
String id = "sample"
and:
1 * userRepoMock.findById(id) >> testUser
when:
User user = userServiceUnderTest.findU
我是第一次来,如果我错过了什么,很抱歉。我希望使用Spock绕过对静态方法的调用。反馈会很棒的
使用groovy mock,我认为我可以通过静态调用,但没有找到它。作为背景,我正在对遗留java中的测试进行改进。重构是禁止的。我使用spock-0.7和groovy-1.8。
对静态方法的调用与以下形式的实例调用链接在一起:
public class ClassUnderTest{
public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWith
当静态类在其他Java类中使用时,Groovy测试不会为该类创建模拟。下面是证明这一点的代码片段
测试中的Java类:
public class JavaClass {
public void method() {
ClassWithStaticMethod.doSomething();
}
}
带有静态方法的Java类:
public class ClassWithStaticMethod {
public static void doSomething() {
System.out.println("Static method
我正在编写我的第一个Spock测试,并在上阅读文档,但仍然没有在一些项目上看到“穿过树的森林”。
我有一个类MyRealm,它为我的应用程序执行身份验证。它有两个依赖项,AuthService和ShiroAdapter。前者是我想嘲笑的,后者是我想要离开的(如果有可能的话)。这是因为AuthService实际上建立了到LDAP的后端连接,所以我想对它进行模拟。但是ShiroAdapter只定义了几个实用工具方法,它们将我的对象转换为Apache安全对象(主体、权限等)。所以它可以不被嘲笑(我的)。
class MyRealmSpec extends Specification {
My
我很难理解Groovy单元测试中关于Spock交互的一些内容。
我有以下类型:
public interface Bar {
public String getMessage();
}
public class Foo {
private Bar bar;
public void setBar(Bar bar) {
this.bar = bar;
}
public String getMessage() {
return bar.getMessage();
}
}
然后我编写了以下Groovy/Spock测试:
class FooSpec extend
我从事Java项目,并开始使用Spock框架在Groovy中编写单元测试。但我对Spock的嘲弄功能有异议,希望有人能找出我做错了什么。
我有三个java类:一个FooContext (包含一个foo属性)、一个HasFooContext类(包含一个fooContext属性)和一个从HasFooContext继承的FooService (并且有一个调用fooContext的操作):
public class FooContext {
private Object foo = new Object();
public Object getFoo() {
return foo;
我有一个开关语句来处理java enum,并且正在使用spock编写一些groovy单元测试。我已经添加了一个测试,以验证当前是否处理了每种类型的foo,而不引发异常。现在,我想测试一个未被识别的foo类型是否会引发异常。
要做到这一点,我将不得不模拟枚举,并且已经看到了这里概述的解决方案:
我也知道可以使用powermock,但是我真的很喜欢spock,因为我发现它非常轻量级,所以我正在寻找一个使用spock的解决方案。
我想像这样的事情可能会奏效:
def "An unexpected type of foo causes an exception to be thrown
我最近升级到Grails 2.3,并尝试将所有旧测试迁移到spock集成测试。但是它在清理时失败了,因为我的测试是非事务性的。Grails说,测试可以是非事务性的,但是我们需要手动处理,但是这里似乎不太正确。当我在每个扩展IntegrationSpec的集成测试中得到这个错误时
java.lang.IllegalStateException: Cannot deactivate transaction synchronization - not active
at grails.test.spock.IntegrationSpec.cleanup(IntegrationSpec.gro
我正面临着一个我无法解决的问题。我的应用程序中有以下代码结构:
src
- main
- java
- test
- java
- groovy
这是相当传统的。一些测试是使用JUnit5用java编写的,而另一些测试是使用Spock用groovy编写的。当我运行gradlew test时,只运行/src/test/groovy中的测试。没有错误。Java测试根本没有运行。我在/src/ test /java中添加了故意失败的测试,以检查打印报告是否有问题。测试没有失败,因为以某种方式忽略了整个包/src/ test /java。
我正在尝试编写一个测试AspectJ通知类的Spock规范。因此,我需要一个org.aspectj.lang.ProceedingJoinPoint类的模拟实例。
void "Verify client capability mechanism"() {
given:
def pointCut = Mock(ProceedingJoinPoint)
and: 'the method calls would have the following arguments'
pointCut.getArgs() >> ['x
我有一些Java类,我已经为其编写了Spock测试。当我试图验证参数中使用的确切对象时,测试失败。
def "all events are published to subscribers"() {
given:
EventSubscriber subscriber = Mock()
when:
subscriber.shouldRegister() >> true
subscriber.interests() >> new HashSet<Intent>
我刚刚开始研究Java应用程序的Spock测试框架。我之前没有使用Groovy的经验。如何使用Spock框架将mock注入到构造函数中?下面是我的代码和测试示例。
public class ResourceClass {
private final IDynamoDBMapper factory = new DefaultDynamoDBClientFactory(DynamoDBConfig.fromProperties()).mapperClient();
private ServiceClass service;
@Inject
public Reso
我希望有不同的返回结果-取决于给定的模拟参数的方法。请考虑下面的代码片段以遵循我的意图
class ExampleSpec extends Specification {
def "should return second value of list of return values"() {
given:
Person personBob = Mock()
Person personJackson = Mock()
PersonHelper stubbedPerson = Stub()
我想用Spock Groovy测试服务,这个服务有点棘手,因为方法调用返回一个值,并更改传递给该方法的变量的内容。
因为我想模拟这个方法调用,所以我需要以某种方式告诉Spock,在执行该方法时,返回一个特定的值并更改传递变量的内容。
就像这样:
given: "list with one element"
List<String> list = ["mock"]
when: "executing the service call"
service.execute(list)
then: "external method i
我是Spock框架的新手,我在使用抽象java测试类时遇到了问题。
我想要的是一个groovy测试类,它用一些常见的方法扩展了其他一些java抽象类,而后者又扩展了Specification。
因此,代码如下:
class GroovyTest extends AbstractTest {
def "my test"() {
....
}
}
public abstract class AbstractTest extends Specification {
...
some common methods
...
}
当
我对Spock很陌生,这个问题涉及到使用Spock进行Java测试的第178页中的示例。测试中的类是购物应用程序的购物篮类,测试该类的方法是canShipCompletely()
public class Basket {
private WarehouseIneventory warehouseInventory;
private ShippingCalculator shippingCalculator;
protected Map<Product, Integer> contents = new HashMap<>();
...
public