Junit 如何在测试插件中禁用代码生成?

Junit 如何在测试插件中禁用代码生成?,junit,code-generation,xtext,Junit,Code Generation,Xtext,在我的测试插件/项目中,我有几个用DSL编写的测试文件。大多数测试都使用内联多行字符串和Xtend,但在四种情况下,我需要测试代码,这些代码对URL和类路径有一定的魔力,因此我确实需要类路径中的资源 由于加载资源只在扩展名正确时才起作用,因此我不能为文件提供假扩展名 现在我的问题是:我的DSL也有一个代码生成器。这意味着,最终,我会在我无法拥有它们的地方得到一些生成的文件(例如,它们不会编译,其中一个甚至包含一个错误,用于在信息被拆分到多个文件时测试错误处理) 我不能禁用Xtext属性,因为测试

在我的测试插件/项目中,我有几个用DSL编写的测试文件。大多数测试都使用内联多行字符串和Xtend,但在四种情况下,我需要测试代码,这些代码对URL和类路径有一定的魔力,因此我确实需要类路径中的资源

由于加载资源只在扩展名正确时才起作用,因此我不能为文件提供假扩展名

现在我的问题是:我的DSL也有一个代码生成器。这意味着,最终,我会在我无法拥有它们的地方得到一些生成的文件(例如,它们不会编译,其中一个甚至包含一个错误,用于在信息被拆分到多个文件时测试错误处理)

我不能禁用Xtext属性,因为测试项目使用Xtend,所以对于这些文件,我确实需要生成代码

由于生成器在Eclipse中运行(我为其他项目安装了DSL插件),因此无法在Guice中重写代码生成器


在这种情况下,如何禁用代码生成器?

有一种简单的方法可以实现这一点:

  • 打开项目的属性
  • 展开DSL的条目
  • 选择“编译器”
  • 选择“启用项目特定设置”
  • 在“常规”下禁用/取消选择“编译器已激活”
  • 如果您没有DSL的属性条目:

  • 将此片段添加到您的
    .mwe2
    工作流文件:

    fragment = generator.GeneratorFragment {}
    
  • 重新生成您的项目

  • plugin.xml\u gen
    中的新代码合并到基本插件和UI插件中的
    plugin.xml

  • 有趣的部分是两个扩展点
    org.eclipse.ui.preferencePages
    org.eclipse.ui.propertyPages

    有一种简单的方法可以实现这一点:

  • 打开项目的属性
  • 展开DSL的条目
  • 选择“编译器”
  • 选择“启用项目特定设置”
  • 在“常规”下禁用/取消选择“编译器已激活”
  • 如果您没有DSL的属性条目:

  • 将此片段添加到您的
    .mwe2
    工作流文件:

    fragment = generator.GeneratorFragment {}
    
  • 重新生成您的项目

  • plugin.xml\u gen
    中的新代码合并到基本插件和UI插件中的
    plugin.xml

  • 有趣的部分是两个扩展点
    org.eclipse.ui.preferencePages
    org.eclipse.ui.propertyPages

    您的设置非常复杂,很难理解您真正想要实现的目标。。。这些“在我的DSL中编写的测试文件”是实际的JUnit测试,还是包含用于测试的数据?您尝试进行的测试是单元测试还是集成测试?您正在测试系统的哪一部分-代码生成部分,或者必须首先生成的东西?为什么不能模拟资源,或者生成适当的测试代码以及其他文件?我的测试文件是测试使用的数据。我不确定他们是UTs还是它在这种情况下-这有关系吗?我正在测试我自己的代码生成器,Xtext的CG可以工作。我解释了为什么我不能嘲笑这些资源:它们必须在类路径上。我正在考虑更改测试用例以将资源复制到bin/文件夹,但我想知道这是否是最好的方法。UT和IT之间的区别在于,在单元测试中,我总是试图找到一种方法来模拟所有依赖项,而集成测试的整点是查看所有部分是否适合在一起。。。在您的情况下,我会说先进行单元测试,然后看看您的测试覆盖率中是否还有盲点。您从哪里获得类路径详细信息?必须有一个调用,生成器通过该调用获得对这些项的访问权,因此这就是您应该模拟的依赖项(即返回假类路径项,并根据这些项验证“魔力”)。这是一个有趣的想法。如何模拟org.eclipse.xtext.resource.ClassloaderClasspathUriResolver?您尝试过mockito吗?您的设置非常复杂,要理解您真正想要实现的目标有点困难。。。这些“在我的DSL中编写的测试文件”是实际的JUnit测试,还是包含用于测试的数据?您尝试进行的测试是单元测试还是集成测试?您正在测试系统的哪一部分-代码生成部分,或者必须首先生成的东西?为什么不能模拟资源,或者生成适当的测试代码以及其他文件?我的测试文件是测试使用的数据。我不确定他们是UTs还是它在这种情况下-这有关系吗?我正在测试我自己的代码生成器,Xtext的CG可以工作。我解释了为什么我不能嘲笑这些资源:它们必须在类路径上。我正在考虑更改测试用例以将资源复制到bin/文件夹,但我想知道这是否是最好的方法。UT和IT之间的区别在于,在单元测试中,我总是试图找到一种方法来模拟所有依赖项,而集成测试的整点是查看所有部分是否适合在一起。。。在您的情况下,我会说先进行单元测试,然后看看您的测试覆盖率中是否还有盲点。您从哪里获得类路径详细信息?必须有一个调用,生成器通过该调用获得对这些项的访问权,因此这就是您应该模拟的依赖项(即返回假类路径项,并根据这些项验证“魔力”)。这是一个有趣的想法。如何模拟org.eclipse.xtext.resource.ClassloaderClasspathUriResolver?您尝试过mockito吗?请注意,从头创建的项目已应用所有这些设置,因此无需编辑mwe2文件。请注意,从头创建的项目已应用所有这些设置,因此无需编辑mwe2文件。