当前位置: 首页 > 知识库问答 >
问题:

一个自定义的spock注释来处理应用和清理元类更改?

仉梓
2023-03-14
@ConfineMetaClassChanges(Bar) -- this will cleanup the metaclass changes
class FooSpec extends Specification {

  def setupSpec() {
    BarHelper.setupMetaClass() -- this applies the metaclass changes
  }

  def "test Foo"() {
    given:
      def bar = createBar()
      def foo = createFoo(bar.x, bar.y)
    ...
  }

}

class BarHelper {
  static def setupMetaClass() {
    Bar.metaclass.x = { ... }
    Bar.metaclass.y = { ... }
  }
@UsingBar -- internally, calls BarHelper.setupMetaClass(), and 
          -- also invokes @ConfineMetaClassChanges(Bar)
class FooSpec extends Specification {

  -- no need for setupSpec() method now

  def "test Foo"() {
    given:
      def bar = createBar()
      def foo = createFoo(bar.x, bar.y)
    ...
  }

}

共有1个答案

司徒钱青
2023-03-14

我想我找到了一个更简单的解决方案:使用groovy类别和Spock@use注释:

class BarCategory {
  static getX(Bar bar) { ... }
  static getY(Bar bar) { ... }
}

@Uses(BarCategory)
public class FooSpec extends Specification {

  def "test Foo"() {
    given:
      def bar = createBar()
      def foo = createFoo(bar.x, bar.y)
      ...
  }

}

这相当于以下内容:

def "test Foo"() {
  given:
    uses(BarCategory) {
      def bar = createBar()
      def foo = createFoo(bar.x, bar.y)
    }
    ...

}

 类似资料:
  • 我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译之前进行注释处理。我将自定义注释和处理器导出为Jar,并尝试将其与简单的java测试程序一起使用。我确信在编译时它会找到我的java处理器类,但不知何故,我并没有得到我在控制台上期望的o/p。下面是我的处理器中处理方法的代码。 此外,我故意使用以便我得到一个版本警告,它确认当我执行一个测试类时,它找到了我的注释处理器。 这里是我的

  • 问题内容: 我想编写自定义的Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok- creating-custom.html 。但是当前的lombok jar文件并不包含许多.class文件,而是包含名为.SCL.lombok的文件。 我发现.SCL.lombok文件是.class文件,Lombok的生成脚本在生成ja

  • 我想编写自定义Lombok注释处理程序。我知道http://notatube.blogspot.de/2010/12/project-lombok-creating-custom.html.但是当前的lombok jar文件并不包含很多内容。类文件,但文件名为。症状自评量表。取而代之的是龙目山。 我发现,的。SCL. lombok文件是. class文件,Lombok的构建脚本在生成jar文件时重

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 我有一个名为< code > globalcexceptionhandler 的类,它由< code>ControllerAdvice注释。它正确处理所有< code > NoHandlerFoundExceptions 。我向添加了一个新方法来处理< code>InternalError异常,但它不处理此类异常;因此,我仍然收到< code>HTTP状态500。 基于此链接,< code>500

  • > 我不能使基本包属性是动态的,即我不能传递,但需要在配置中预先定义包。 我查看了,但无法使其工作。 当我忽略基本包时,扫描从注释的定义包开始,而不是从注释类的包开始。在上面的示例中,它只扫描并创建中类的bean,而不扫描并创建中的bean。 如果将放在类上,则一切都可以工作,但当将其移动到的元注释时,将停止工作。如何告诉Spring Framework将视为使用某些默认值指定的另一种方式。我尝试