Разве общая теория о том, что OrderEJB и Order and LineItem являются (если мы игнорируем аннотацию) только POJO и, следовательно, может быть протестирована в автономном JUnit? Нам нужно будет смоделировать EntityManager, и предположительно в
calculateOrderTotal()
у вас есть код, который по идее идет
em.giveMeThisOrder(orderId)
и вы просто издеваетесь над этим. Затем проверяемая логика бизнеса зависит от того, что возвращает Mock. Ключом к этому является то, что вы должны использовать хороший фреймворк, например JMock. В любом заданном тесте вы говорите (явно не с этим синтаксисом):
EntitiyManager mockEm = // create the mock
mockEm.check(that you are called with and order Id of 73)
mockEm.please( when someone calls giveMeThisOrder return then **this** particular order)
и поэтому в каждом тесте вы создаете именно тот порядок, который вам необходим для выполнения некоторого аспекта кода калькуляции. У вас может быть много таких тестов, которые выдвигают все крайние и угловые случаи вашего вычисления.
Ключевая идея здесь заключается в том, что модульный тест не предполагает никаких внешних зависимостей, таких как база данных. Интеграционное тестирование может использовать реальную базу данных. Это может быть хлопотно, чтобы правильно настроить свои макеты, создание этих экземпляров Order может быть довольно скучным, но это, как правило, значительно ускоряет будущее тестирование.
Я также предпочитаю проводить раннее интеграционное тестирование - таким образом вы обнаружите целый другой класс ошибок.