2010-05-21 3 views
0

Есть ли хорошая структура для сравнения целых объектов?Единица измерения для сравнения бобов

теперь я

assertEquals("[email protected]", obj.email); 
assertEquals("5", obj.shop); 

если плохая электронная почта возвращается я никогда не знать, если это был правильный магазин, я хотел бы получить список неправильных полей.

+0

Дубликат: http://stackoverflow.com/questions/1411612/how-to-test-for-equality-of-complex-object-graphs – skaffman

+0

мой объект simple;) – IAdapter

ответ

1

Идет с 1 тестом, 1 утверждают линию мышления, если вы каждый утверждаете в своем собственном тесте, вы бы знали, если один или оба из них потерпели неудачу из-за того, что было 1 или 2 неудачных теста.

@Test 
public void TestEmail() 
{ 
    obj = GetTestObject(); 
    assertEquals("[email protected]", obj.email); 
} 

@Test 
public void TestShop() 
{ 
    obj = GetTestObject(); 
    assertEquals("5", obj.shop); 
} 

очевидно, нужно переместить установку объекта в метод ВЗ есть он выполняется в ходе испытания на метод и его переменной класса.

Если вы действительно хотите, чтобы проверить, все свойства устанавливаются в одном тесте:

@Test 
public void TestAllProperties() 
{ 
    obj = GetTestObject(); 
    bool testResult=true; 
    string failureString; 
    if "[email protected]".equals(obj.email) == false 
    { 
     testResult=false; 
     failureString+="email was different"; 
    } 
    if "5".equals(obj.shop) == false 
    { 
     testResult=false; 
     failureString+="shop was different"; 
    } 
    assertTrue(testResult,failurestring); 
} 

, но я не уверен, что это дает вам на самом деле.

Но если вы действительно хотите сравнить целостность всех объектов, то переопределите метод equals (не забывая также getHashCode) и проверив там проверку равенства. в конце концов, это то, для чего это необходимо ...

Если вам нужен список неправильных полей, вы можете заставить метод equals заполнить внутренний список, который вы могли бы запросить, если проверка равенства не удалась, чтобы получить список неудачных полей в последний раз было проверено равенство. На самом деле не думайте, что это хорошая идея.

0

Если вы хотите проверить объект равенство, то, конечно, вам нужно реализовать равные() и тест с использованием assertEquals(), но в остальном Сэм является правильным, одно утверждения на тест

1

Я хотел бы пойти на Hamcrest matchers. Они позволяют мне писать код, как это:

assertThat(obj, hasProperty("email", equalTo("[email protected]"))); 
+1

Мне лично не нравится hamcrest. для меня это выглядит бесполезным текстом. почему не просто assertEquals (obj.getEmail(), «[email protected]»); его намного короче! для меня это похоже на добавление дополнительного кода для удовольствия (плюс статический импорт!). – IAdapter

+0

Есть так много причин, почему hamcrest не бесполезный текст =) Прежде всего ваше * намерение * намного чище, тогда вы получаете значимую ошибку, когда она терпит неудачу вместо общего «AssertionError», и, прежде всего, это расширяемый! – atamur

+0

Значимые ошибки также звучат здорово и расширяемо. Я посмотрю в нее, THX :) – IAdapter