Grails单元测试中的“junit.framework.AssertionFailedError:null”

时间:2011-11-19 16:27:18

标签: unit-testing testing grails

我是grails的新手,我正在尝试运行一些测试。我有两个班:

class Category {
    String name;
}

class Animal {
    Category category1
    Category category2

    boolean addCategory(Category category) {
        if (!category1) {
            category1 = category
            return true
        }
        else if (!category2) {
            category2 = category
            return true
        }
        return false
    }

    boolean hasCategory(Category category) {
        return category1 == category || category2 == category
    }
}

现在我写了一个测试,应该检查添加两个以上的类别是否失败,第三个类别不属于类别的一部分:

class AnimalTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testMaximumCategories() {
        Category category1 = new Category(name: "Category 1")
        Category category2 = new Category(name: "Category 2")
        Category category3 = new Category(name: "Category 3")

        Animal animal = new Animal(title: "Animal")
        assertTrue(animal.addCategory(category1))
        assertTrue(animal.addCategory(category2))
        assertFalse(animal.addCategory(category3))

        assertTrue(animal.hasCategory(category1))
        assertTrue(animal.hasCategory(category2))
        assertFalse(animal.hasCategory(category3))
    }
}

此测试总是在最后一行失败,堆栈跟踪是以下

null
junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertFalse(Assert.java:34)
at junit.framework.Assert.assertFalse(Assert.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1323)
at groovy.lang.ExpandoMetaClass.invokeStaticMethod(ExpandoMetaClass.java:1082)
at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java:62)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:165)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:173)
at animal.AnimalTests.testMaximumCategories(AnimalTests.groovy:23)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

...

我做错了什么?

1 个答案:

答案 0 :(得分:0)

当我复制/粘贴您的代码时失败,因为title类中没有Animal属性。这可能是将实际代码转换为演示代码的工件,但它可能会导致一些编译器的怪异。尝试运行grails clean以强制进行完整编译。一旦我添加了title字段,它就可以正常工作。