Phi*_*enn 18 java groovy junit mockito spock
使用Mockito示例页面中最基本的示例,我能够在JUnit中成功运行.
但是,当我在Spock中运行相同的测试时,它会失败.
JUnit/Java版本(通过):
import org.junit.Test;
import java.util.List;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class SimpleJunitTest
{
@Test
public void basicMockTest()
{
List mockedList = mock(List.class);
//using mock object
mockedList.add("one");
mockedList.clear();
//verification
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
Run Code Online (Sandbox Code Playgroud)
Spock/Groovy版本(失败):
import static org.mockito.Mockito.mock
import static org.mockito.Mockito.verify
class SimpleSpockTest extends spock.lang.Specification
{
def "Basic Mock Test"()
{
given:
//mock creation
List mockedList = mock(List.class);
when:
//using mock object
mockedList.add("one");
mockedList.clear();
then:
//verification
verify(mockedList).add("one");
verify(mockedList).clear();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在Spock测试失败时得到的错误:
Condition not satisfied:
verify(mockedList).add("one")
| | |
| | false
| $java.util.List$$EnhancerByMockitoWithCGLIB$$172e393a@613043d2 (renderer threw
NullPointerException)
$java.util.List$$EnhancerByMockitoWithCGLIB$$172e393a@613043d2 (renderer threw
NullPointerException)
at SimpleSpockTest.Basic Mock Test(SimpleSpockTest.groovy:25)
Run Code Online (Sandbox Code Playgroud)
任何想法或建议?我真的很喜欢Spock和Mockito,我希望能让他们在一起工作.非常感谢你!
Pet*_*ser 21
粗略地说,then-block只能包含布尔表达式形式的断言.甲验证的Mockito表达不适合这项合同,因为它会返回一个falsy值(null
,false
,0
),当它通过时,这被解释为通过斯波克失败的断言.
要解决这个问题,您可以编写一个包装验证表达式并始终返回的辅助方法,true
也可以使用Spock的内置模拟框架而不是Mockito.
归档时间: |
|
查看次数: |
4032 次 |
最近记录: |