强制assertEquals(String s,Object o)使用o.toString()?

时间:2016-03-02 11:51:53

标签: java string junit tostring assert

是否可以强行

assertEquals("10,00 €", new Currency(bon.getTotal()))

使用Currency对象的toString()方法? (我不想自己打电话。)

否则,它会比较参考文献,当然这些参考文献不匹配。

  

java.lang.AssertionError:

     

预期:java.lang.String< 10,00€>

     

但是:jam.cashregister.Currency< 10,00€>

更新

我最终得到了这段代码:

assertEquals(new Currency(bon.getTotal()), "10,00 €");
  

我不知道交换预期的是否是个好主意   在断言中的实际部分。

public class Currency() {

    @Override
    public boolean equals(Object other) {
        return this.toString().equals(other.toString());
    }
}

2 个答案:

答案 0 :(得分:3)

您应该比较Currency的两个实例:

assertEquals(new Currency("10,00 €"), new Currency(bon.getTotal()))

因此,重新定义equals()是强制性的。如果相等必须基于Currency的字符串表示,那么它也必须覆盖toString()(您可能已经这样做了)。

public class Currency {

    ...

    @Override
    public String toString() {
        //overriden in a custom way
    }

    @Override
    public boolean equals(Object other) {
        if(other instanceof Currency) {
            Currency that = (Currency) other;
            return this.toString().equals(that.toString());
        }
        return false;
    }

    ...
}

答案 1 :(得分:1)

不,这样做的唯一方法就是自己写一下:

assertEquals("10,00 €", new Currency(bon.getTotal()).toString());