我有一个Groovy/Spock单元测试,如下所示:
public class ThingUnitTest extends Specification {
def "doing a thing delegates to the context"() {
given : def thing = createThing()
when : thing.doThing()
then : 1 * thing.context.doThing()
}
def createThing() {
def thing = new ThingImpl()
thing.context = createThingContext()
return thing
}
def createThingContext() {
def context = Spy(ThingContext)
context.foo = Mock(Foo)
context.bar = Mock(Bar)
return context
}
}
这个测试将不会出现问题。但是,我有其他测试需要ThingContext
,所以我想将CreateThingContext
代码移到一个公共类中:
public class ThingContextFactory extends Specification {
def createThingContext() {
def context = Spy(ThingContext)
context.foo = Mock(Foo)
context.bar = Mock(Bar)
return context
}
}
public class ThingUnitTest extends Specification {
...
def createThingContext() {
return new ThingContextFactory().createThingContext()
}
}
public class ThingContextFactory {
def createThingContext() {
def mocking = new MockingApi()
def context = mocking.Spy(ThingContext)
context.foo = mocking.Mock(Foo)
context.bar = mocking.Mock(Bar)
return context
}
请注意,我不想在这里使用继承,而是将常见的模仿代码移到帮助器类中。但当我这么做的时候,我的斯波克测试失败了。
有什么适当的方法来重构Spock嘲笑代码吗?
在Spock0.7中,模拟对象只能在使用它们的测试类或其超类中创建。这可能会在下一个版本中改变。
我用代码编写了以下旧方法,用于访问服务类中的请求对象,例如:
我在这里面临一个非常奇怪的问题。 以下是我的测试课程: SearchViewModel。Java语言 这里的测试用例工作得非常好,直到我删除了行
我最近才开始为我们的web应用程序创建Geb/Spock测试,并且--考虑到我对Geb、Spock和所有Groovy的知识有限--遇到了一个毫无意义的错误(考虑到我的Java经验)。 因此,下面是有问题的模块: 那里没什么特别的。 以下是这一页(不过,我不确定这是如何结合在一起的): 根据Erdi的回答,BugSpec的超类也包括在内:
在我的JavaFX应用程序中,我使用Spock和Groovy进行测试。我有专门的来处理我的JavafX组件。我想测试一些依赖于当前位置和文档的功能。 WebBrowserController的相关部分: 这就是我为测试创建实例的方法。注意我在这里使用的-普通不适用于final类,而是final类。 下面的线正在测试中,它断了。我希望“一些随机字符串”返回,但我只是得到失败的测试和NPE。 现在,有
问题内容: 我正在为具有两个方法methodA,methodB的类编写JUnit测试用例。我想在测试用例中模拟对methodA的methodB调用,我正在对正在测试的类使用间谍,但仍然执行methodB。 这是课程 这是测试课 尽管我已对其进行了模拟,但方法B仍会得到调用。请向我建议一个使用正确方法模拟同一类methodA的methodB调用的解决方案。 问题答案: 我昨天碰到这个,因为间谍最好做
我创建了两个相当长的函数,它们创建了一个AlertDialogBuilder,AlertDialogBuilder创建了一个已填充并启动的AlertDialog。生成的警报对话框对于对话框来说相当大,因此需要在对话框中填充大量视图。出于清洁性、可测试性、SRP等方面的考虑,我决定将这些函数移到一个新的类中。 原来函数直接放在Activity类中,警报对话框启动得很好。现在,我将两者都移到了一个Al