我们有几个Spock测试,当它们在构建中一起运行时,由于“permgen space”而失败。我应该注意到一些测试确实通过而其他测试没有通过。我做了明显的第一步,尝试增加permgen和maxPermSize的java参数无济于事。我通过转到teamCity中的“构建参数”,创建了一个名为“env.JAVA_OPTS”的新参数并将此字符串作为值来完成此操作:
-XX:MaxPermSize=256m
我们正在使用Ant作为构建工具。这是运行测试的目标。顺便说一句,我确实以分叉模式尝试了它:
<target name="test" depends="compileTests">
<junit>
<formatter type="plain" usefile="false" />
<classpath path="${testBuildDir}" />
<classpath refid="classpath" />
<classpath path="${deployClassesDir}" />
<batchtest>
<fileset dir="${testBuildDir}">
<include name="**/*Spec.class"/>
</fileset>
</batchtest>
</junit>
</target>
我尝试通过忽略测试类中的所有测试并逐个激活它来隔离问题。这导致了不一致的结果。 这是一个测试的例子。我第一次摘下“忽略”注释,它就过去了。然后我取消了另一个测试的注释,但失败了。我放回了“忽略”注释,第一次测试失败,这让我感到惊讶。在此先感谢您的帮助。
class CitiUserPasswordValidatorSpec extends Specification{
@Shared def username = "username1";
@Shared def citiUserPasswordValidator = new ident.web.citi.CitiUserPasswordValidator()
private String invalidPassword;
@Ignore
def "Password is valid." (){
setup:
def facesContextMock = Mock(FacesContext)
def uiComponentMock = Mock(UIComponent)
def uiInputMock = Mock(UIInput)
def uiViewRootMock = Mock(UIViewRoot)
def password = "aBcqwe123"
facesContextMock.getViewRoot() >> uiViewRootMock
uiViewRootMock.findComponent("RtWindow:buttons:username") >> uiInputMock
uiInputMock.getSubmittedValue() >> username
when:
citiUserPasswordValidator.validate(facesContextMock, uiComponentMock, password);
then:
notThrown ValidatorException
}...