我们正在考虑在我们的验收测试项目中使用Cucumber.
当我们写scenario在黄瓜feature,我们写的名单Given,When和Then语句.
当我们使用cucumber-jvm项目时Given,When和Then语句与(JUnit)类中的Java方法有关.
我想知道在项目结构中与Given/ When/ 相关的代码的最佳组织是什么Then.我主要担心的是在一个大项目上维护黄瓜测试,其中场景的数量非常重要,特别是关于功能之间共享的项目.
我可以看到至少两种主要方法:
每个功能都与它自己的JUnit类相关.所以,如果我有一个foo/bar/baz.feature黄瓜文件,我会发现相关型号foo.bar.Baz与适当的JUnit类@Given,@When和@Then注释的方法.
独立@Given,@When并且@Then方法进入"主题"类和包.例如,如果在我的黄瓜场景中我有一个语句Given user "foo" is logged,那么带@Given("^user \"([^\"]*)\" is logged$")注释的方法将位于foo.user.User类方法中,但可能,@When稍后在同一个黄瓜场景中使用的方法将在不同的Java类和包中(假设foo.car.RentCar) .
对我来说,第一种方法似乎很好,我可以很容易地做我的黄瓜功能和我的Java代码之间的关系.但缺点是我可能会有很多冗余或代码重复.此外,可能很难找到可能的现有@Given方法,以避免重新创建它(IDE可以提供帮助,但在这里我们使用Eclipse,它似乎没有给出现有Given语句的列表?).
当你在几个黄瓜特征之间共享条件时,另一种方法似乎更好Given,因此我想避免代码重复.这里的缺点是很难在@GivenJava方法和 …
java acceptance-testing cucumber cucumber-jvm cucumber-junit
如标题中所述,如何在最简单的方式中修改a pom.xml,以便在命令行中未设置属性时使其失败.
例如,mvn clean package将失败,什么时候mvn clean package -Dfoo=bar会成功.
我正在寻找类似的<prerequisites/> 标签中pom.xml(除了<prerequisites/>只允许我检查Maven版)...
我有一个插件,可以转换编译的类.需要对模块的类和模块的测试类进行此转换.因此,我将插件绑定到进程类和进程测试类阶段.我遇到的问题是我需要确定插件当前正在执行哪个阶段,因为我没有(实际上不能)实际上将同一组类转换两次.
因此,在插件中,我需要知道我是否正在执行进程类 - 在这种情况下我转换模块的类.或者,如果我正在执行process-test-classes - 在这种情况下,我不会转换模块的类并仅转换模块的测试类.
当然,我可以为此创建两个插件,但这种解决方案深深地冒犯了我的敏感性,可能违反了几个州的法律.
似乎我可以从我的模块中获得的东西应该能够告诉我当前的阶段是什么.我不能为我的生活找出那是什么东西.
谢谢...
请考虑以下代码段:
public static void main(String[] args) {
int z1 = 0;
final int z2 = 0;
System.out.println(false ? z1 : 'X');
System.out.println(false ? z2 : 'X');
}
Run Code Online (Sandbox Code Playgroud)
运行此代码时,我希望X在您的控制台中看到两个代码.但是,实际输出是:
88
X.
如果其中一个操作数是T类型,其中T是byte,short或char,另一个操作数是int类型的常量表达式,其值可以在类型T中表示,那么条件表达式的类型是T.
所以第一个输出将'X'char视为一个int,这就是它打印的原因88.
但是,我不确定为什么使用final更改第二个输出的行为.
我知道可以加密密码并将加密数据放入其中settings.xml,以便Maven可以访问远程服务器(用于部署等).
但是,在我的情况下,密码是第三方插件配置中的参数.
通常,pom.xml此插件的配置如下所示:
<build>
<plugins>
<plugin>
<groupId>xxx</groupId>
<artifactId>maven-xxx-plugin</artifactId>
...
<configuration>
<serverAddress>http://myserver</serverAddress>
<port>4242</port>
<username>unicorn</username>
<password>thePassword</password>
...
Run Code Online (Sandbox Code Playgroud)
但是我不喜欢在我的文本中用纯文本设置密码的想法pom.xml.所以我尝试将它设置为property(<password>${encrypted.password}</password>)并settings.xml使用mvn --encrypt-password thePassword命令在文件中设置加密密码:
<profiles>
<profile>
<id>myprofile</id>
<properties>
<!-- Encrypted passwords -->
<encrypted.password>{dJXVRKwRiY8HqzhGecHd/MYju/aIEmMT8cnE6MY53uPNr0ro/CAsXSLlgzEjxYeU}</encrypted.password>
</properties>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用(我怀疑该插件使用加密密码作为"清除"密码,并不试图解密它).
有没有办法让它发挥作用?如果没有,有什么方法可以避免将纯文本密码放入pom.xml或settings.xml?
谢谢.
ps:我正在使用Maven 2.2.1,但如果需要,我也可以使用Maven 3.0.
我知道有些(疯狂的)人想要从IntelliJ迁移到Eclipse.在我这边,我正在移动"正常方式",即从Eclipse 3.3到IntelliJ 8.0.1
我真的很喜欢它,但有时我有点失落.
您是否知道专门为Eclipse用户创建的任何特定IntelliJ指南或教程?
例如,在一些测试之后,我错过了一些对Eclipse有用的选项(我不是说它们在IntelliJ中不存在,我只是说我没找到它们!):
我有两个项目,my-lib和my-webapp.第一个项目是依赖my-webapp.因此,当要求Maven2构建我的WAR时,my-libJAR将添加WEB-INF/lib/到Web应用程序的目录中.
但是,我希望将my-libJAR直接解压缩到WEB-INF/classes目录中,就像my-lib源代码包含在项目中一样my-webapp.
换句话说,而不是具有以下WAR内容:
my-webapp/
...
WEB-INF/
lib/
my-lib-1.0.jar
... (others third libraries)
Run Code Online (Sandbox Code Playgroud)
我想拥有:
my-webapp/
...
WEB-INF/
classes/
my-lib files
lib/
... (others third libraries)
Run Code Online (Sandbox Code Playgroud)
有没有办法配置my-webapp或Maven2战争插件来实现这一目标?
我想从两个不同的表中获得几列的总和(这些表共享相同的结构).
如果我只考虑一个表,我会写这种查询:
SELECT MONTH_REF, SUM(amount1), SUM(amount2)
FROM T_FOO
WHERE seller = XXX
GROUP BY MONTH_REF;
Run Code Online (Sandbox Code Playgroud)
但是,我还想使用表T_BAR中的数据,然后有一个select返回以下列的查询:
一切按价值分组MONTH_REF.
请注意,给定的记录MONTH_REF可以在一个表中找到,但不能在另一个表中找到.在这种情况下,我想得到T_FOO.amount1 + 0(或0 + T_BAR.amount1)的总和.
如何编写SQL查询以获取此信息?
有关信息,我的数据库是Oracle 10g.
注意:我在这个问题的第一个版本中没有得到任何回复,因此我将其修改为更通用的...
上下文
我的项目分为几个maven模块和几个web应用程序.这是结构:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
Run Code Online (Sandbox Code Playgroud)
所有Web应用程序都共享公共资源,例如JS,CSS和图像文件.
web-app-X我决定创建另一个名为web-resourcesWAR项目的项目,而不是在每个项目中复制这些资源.结构如下:
my-project
+ pom.xml
+-- commons
+-- persistence
+-- ...
+-- web-app-1
+-- web-app-2
+-- ...
+-- web-resources
+-- pom.xml
+-- src/main/webapp
+-- web.xml (which is almost empty, just need to be present for Maven)
+-- web_resources
+-- css
+-- images
+-- javascript
Run Code Online (Sandbox Code Playgroud)
Maven的
在Maven 2(或Maven 3,因为我刚刚将我的项目迁移到maven 3.0.2),这个配置很容易管理,因为所有都web-app-X声明web-resources为依赖:
<groupId>foo.bar</groupId>
<artifactId>web-app-1</artifactId>
...
<dependencies>
<dependency>
<groupId>foo.bar</groupId> …Run Code Online (Sandbox Code Playgroud) 我在几台机器上部署了一个Java 1.6应用程序(~30),并作为Windows服务启动.
我的主要问题是维护这些部署的工件:如果我开发了这个应用程序的新版本,我不想在每台机器上手动重新部署它.
理想情况下,当Windows服务启动时,它会检查远程服务器是否存在更新,如果找到,则会升级应用程序.请注意,在此升级之后,可以再次重新启动服务.
可以将此机制与Maven快照验证进行比较:如果SNAPSHOT远程存储库上有较新版本的版本,则Maven会在运行之前下载该版本.请注意,应用程序本身将部署在Maven存储库(在我们的示例中为Nexus)中,因此将针对此Nexus实例检查更新.
我实现这种自动应用程序更新的技术解决方案是什么?
不要犹豫,向我询问有关技术信息或背景的更多细节......
谢谢.
编辑:正如Peter Lawrey所说,我可以使用Java Web Start.但是,如何将JWS集成到作为Windows服务运行的Java应用程序中?
java ×3
maven-2 ×3
eclipse ×2
maven ×2
auto-update ×1
cucumber ×1
cucumber-jvm ×1
deployment ×1
final ×1
group-by ×1
maven-plugin ×1
oracle ×1
sql ×1
sum ×1