Spock测试用尽了团队中的permgen

时间:2013-10-07 17:02:00

标签: java teamcity spock

我们有几个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
}...

0 个答案:

没有答案