gpt4 book ai didi

grails - 在单元测试中,如何替换域对象上的接口(interface)方法?

转载 作者:行者123 更新时间:2023-12-02 13:57:25 25 4
gpt4 key购买 nike

我正在使用 Groovy 1.8.6 和 Grails 2.1.1

我有一个界面

public interface Searchable{
Long docVersion()
}

由对象实现
class Book implements Searchable {
Long docVersion() {
System.currentTimeMillis() / 1000L
}

String otherMethod() {
"toto"
}
}

和一个测试
@Mock([Book])
class SomeBookTester {
@Before
void setup() {
Book.metaclass.docVersion = {-> 12345}
Book.metaclass.otherMethod = {-> "xyz"}
}

@Test
void test1() {
assert 12345 == new Book().docVersion()
}

@Test
void test2() {
assert "xyz" == new Book().otherMethod()
}
}

第一次测试总是失败,因为方法替换不起作用。我该如何解决这个问题?有什么问题?

最佳答案

您最好使用适当的 GrailsMock 设施。你可以试试这个:

@Mock([Book])
class SomeBookTester {
@Before
void setup() {
def mockBook = mockFor(Book)
mockBook.demand.docVersion(0..1) { -> 12345 }
mockBook.demand.otherMethod(0..1) { -> "xyz" }
Book.metaClass.constructor = { -> mockBook.createMock() }
}

@Test
void test1() {
assert 12345 == new Book().docVersion()
}

@Test
void test2() {
assert "xyz" == new Book().otherMethod()
}
}

关于grails - 在单元测试中,如何替换域对象上的接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com