У меня есть пользовательский тег lib, который я написал, чтобы я мог легко отображать свойства объекта. Это позволяет мне позвонитьGrails 2.0 Unit Testing Custom Tag Lib
<g:property label="Name" property="${user.name}"/>
который держит мои взгляды коротким и последовательным, а также позволяет мне быстро вносить изменения. Мой код taglib выглядит следующим образом:
def property = {attrs, body ->
def startingHtml = "..."
def endingHtml = "..."
out << startingHtml
renderField(attrs.property)
out << endingHtml
}
def renderField(property) {
if (property instanceof Collection) {
property.each { out << it + "</br>" }
} else if(property instanceof Address){
renderAddress(property)
} else {
out << property
}
}
def renderAddress(address) {
out << "Address Render Logic Here"
}
Я пытаюсь добавить некоторые модульные тесты вокруг этого кода, потому что в нем есть логика. Используя приведенные здесь примеры (http://grails.org/doc/latest/guide/testing.html#unitTestingTagLibraries) Я начал добавлять некоторые тесты. Первые два сценария, которые обрабатываются моим тегом, это String and Collection, которые я смог проверить правильно (первые два теста ниже). Последним сценарием, который мне нужно проверить, является объект Address (который является только POGO со строковыми атрибутами). Я не могу найти способ проверить передачу объекта в качестве атрибута в тег lib.
@TestFor(PropertyTagLib)
class PropertyTagLibTests {
@Test
void propertyTagShouldRenderPropertyInsideOfTDWhenPropertyIsAString() {
String result = applyTemplate('<g:property label="something" property="someTextValue"/>').trim()
assert result.contains('someTextValue')
}
@Test
void propertyTagShouldRenderList() {
String result = applyTemplate('g:property label="something" property="[\"one\", \"two\", \"three\"]"/>').trim()
assert result.contains("one</br>two</br>three</br>")
}
@Test
void propertyTagShouldRenderPropertyInsideOfTDWhenPropertyIsAnAddress() {
def address = new Address(line1: "Line 1")
String result = applyTemplate('<g:property label="something" property="${address}"/>').trim()
assert result.contains("Address Render Logic Here")
}
}
Как я могу проверить свой taglib, когда один из атрибутов является объектом?
Не уверен, что на этом, я думаю. Мой оригинальный ответ был просто опасным, но у меня нет никаких предложений за его пределами:/ –