У меня есть два модульных теста контроллера, и каждый из них устанавливает метакласс HttpClient, выполняемый в setUp (), как показано ниже:
HttpClient.metaClass.execute = { HttpUriRequest request ->
<return expected data for my tests>
}
Затем я пытаюсь разрушить метакласс в tearDown () с помощью следующего кода:
protected void tearDown() {
super.tearDown()
GroovySystem.metaClassRegistry.removeMetaClass(HttpClient.class)
}
Однако только один из моих модульных тестов проходит, потому что возврат из HttpClient является неправильным / неожиданным Если я добавлю логику, необходимую для обоих тестов, в metaClass.execute обоих тестов, я не получу ошибок тестирования. Однако это громоздко и непрактично, особенно в гибкой среде разработки.
Что я делаю не так, пытаясь разрушить эту регистрацию метакласса HttpClient? Как я могу устранить эту проблему дальше?
В настоящее время я использую Grails 1.3.7 при установке CentOS 5.
Редактировать: Я должен уточнить, что моя проблема в том, что переопределение метакласса вызывает проблемы между тестовыми классами , а не тестовыми случаями. Мы настроили переопределение метакласса, чтобы оно возвращало правильные данные для всех тестовых случаев в данном классе. Таким образом, у класса Test A есть данные метакласса для его тестовых случаев, а у класса Test B есть данные метакласса для его тестовых случаев. Проблема заключается в том, что, поскольку тестовый класс A тестируется первым, тестовый класс B заканчивается использованием метакласса из тестового класса A и из-за этого не работает.