oia*_*kyi 12 groovy metaprogramming metaclass categories
我有简单的Groovy类类,它为String实例添加了方法:
final class SampleCategory {
static String withBraces(String self) {
"($self)"
}
}
Run Code Online (Sandbox Code Playgroud)
我想在我的单元测试中使用这个类别(例如).它看起来像这样:
class MyTest {
@Test
void shouldDoThis() {
use (SampleCategory) {
assert 'this'.withBraces() == '(this)'
}
}
@Test
void shouldDoThat() {
use (SampleCategory) {
assert 'that'.withBraces() == '(that)'
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想要实现的是能够指定SampleCategory在每个实例方法的范围内使用类别,MyTest因此我不必use(SampleCategory) { ... }在每个方法中指定.
可能吗?
ata*_*lor 11
您可以使用mixin将类别直接应用于String的metaClass.将null分配给metaClass以将其重置为groovy默认值.例如:
@Before void setUp() {
String.mixin(SampleCategory)
}
@After void tearDown() {
String.metaClass = null
}
@Test
void shouldDoThat() {
assert 'that'.withBraces() == '(that)'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |