标签: jmock

关于with(任何(Class.class)))与JMock

使用JMock:

context.checking(new Expectations() {{
    // Other oneOf() will() statements ...

    oneOf(shopAccount).enter(100, with(any(String.class)));
    will(returnValue(true));

   // Other oneOf() will() statements ...
}});
Run Code Online (Sandbox Code Playgroud)

执行期间将引发以下异常:

java.lang.IllegalArgumentException:并非所有参数都被赋予显式匹配器:要么所有参数都必须由匹配器指定,要么所有参数都必须由值指定,您不能混合使用匹配器和值.

为什么我不能这样做?用with(any(Klass.class))

java testing jmock

18
推荐指数
1
解决办法
6882
查看次数

JMockit有任何缺点吗?

这个比较表明,JMockit比其他框架有几个优点.

其他一个(JMock,EasyMock,Mockito,Unitils,PowerMock + Mockito/EasyMock)是否还有JMockit的优势?

java unit-testing jmockit jmock mockito

16
推荐指数
2
解决办法
5594
查看次数

我可以模拟一个超类方法调用吗?

有时,您希望测试一个类方法,并且希望在调用超类方法时进行预期.我没有找到一种方法来使用easymock或jmock在java中做这个期望(我认为这是不可能的).

有一个(相对)干净的解决方案,用超类方法逻辑创建一个委托,然后设置它的期望,但我不知道为什么以及什么时候使用该解决方案?任何想法/例子?

谢谢

java tdd easymock mocking jmock

15
推荐指数
3
解决办法
2万
查看次数

单元测试辅助方法?

我有以前有大量方法的类,所以我将这个方法的工作细分为'helper'方法.

这些辅助方法被声明private为强制封装 - 但是我想对大型公共方法进行单元测试.对辅助方法进行单元测试也是好的,就好像其中一个方法失败了,调用它的公共方法也会失败,这样我们就可以找出它失败的原因了吗?

另外,为了使用模拟对象测试这些,我需要将其可见性从私有更改为受保护,这是否可取?

java junit unit-testing jmock helpermethods

15
推荐指数
5
解决办法
1万
查看次数

jmock模拟静态方法

我的代码中有一个静态方法,我想以某种方式来模拟.

我正在使用jmock.

我认为我可以这样做的一种方法是在静态方法周围使用"包装类"并模拟这个,但我希望有一个更好的解决方案.

我这是错误的方式吗?

反馈:

我将有一个接口和类有一个方法,只是调用静态方法.它允许我通过模拟对这个包装类的调用来模拟逻辑.(即使谈论它我也觉得很脏:))

java mocking jmock

11
推荐指数
2
解决办法
2万
查看次数

我们什么时候应该使用Mockery vs JUnit4Mockery?

如果使用JMock使用mocking编写Java单元测试,我们应该使用

Mockery context = new Mockery()
Run Code Online (Sandbox Code Playgroud)

要么

Mockery context = new JUnit4Mockery()
Run Code Online (Sandbox Code Playgroud)

两者之间有什么区别,我们什么时候应该使用哪个?

junit mocking jmock

11
推荐指数
1
解决办法
5059
查看次数

JMOCK依赖问题

我正在尝试通过我的第一个JMOCK教程http://www.jmock.org/getting-started.html,但它并不顺利.

我遇到的问题如下:


java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(Unknown Source)
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown …
Run Code Online (Sandbox Code Playgroud)

jmock

11
推荐指数
2
解决办法
6334
查看次数

mockito与jMock的州有相同的习语吗?

增长面向对象软件这本书在jMock中给出了几个例子,其中状态是明确的,而不是通过API公开它.我真的喜欢这个主意.在Mockito有办法做到这一点吗?

这是本书的一个例子

public class SniperLauncherTest {
   private final States auctionState = context.states("auction state")
                                              .startsAs("not joined");

   @Test public void addsNewSniperToCollectorAndThenJoinsAuction() {
     final String itemId = "item 123";
     context.checking(new Expectations() {{
       allowing(auctionHouse).auctionFor(itemId); will(returnValue(auction));

       oneOf(sniperCollector).addSniper(with(sniperForItem(item)));
                                   when(auctionState.is("not joined"));      
       oneOf(auction).addAuctionEventListener(with(sniperForItem(itemId)));
                                   when(auctionState.is("not joined"));
       one(auction).join(); then(auctionState.is("joined"));
     }});

     launcher.joinAuction(itemId);
   }
}
Run Code Online (Sandbox Code Playgroud)

java testing mocking jmock mockito

11
推荐指数
2
解决办法
1152
查看次数

捕获jMock中的方法参数以传递给存根实现

我希望实现以下行为.我的测试类依赖于其他一些类,我希望用jMock来模拟这种依赖.大多数方法会返回一些标准值,但有一个方法,在这里我想打个电话到存根实现,我知道我可以调用从这个方法will(...),但我想用完全相同的参数来调用的方法传递给模拟方法的.

测试

@Test
public void MyTest(){
    Mockery context = new Mockery() {
        {
            setImposteriser(ClassImposteriser.INSTANCE);
        }
    };
    IDependency mockObject = context.mock(IDependency.class);
    Expectations exp = new Expectations() {         
        {
            allowing(mockObject).methodToInvoke(????);
            will(stubMethodToBeInvokedInstead(????));
        }       
    };      
}
Run Code Online (Sandbox Code Playgroud)

接口

public interface IDependency {
    public int methodToInvoke(int arg);
}
Run Code Online (Sandbox Code Playgroud)

要改为调用的方法

public int stubMethodToBeInvokedInstead(int arg){
    return arg;
}
Run Code Online (Sandbox Code Playgroud)

那么我如何捕获传递给被模拟方法的参数,所以我可以将它们传递给存根方法呢?

编辑

再举一个例子,假设我想INameSource在下面的(C#)代码中模拟依赖关系来测试类的扬声器

public class Speaker
{
  private readonly string firstName;
  private readonly string surname;
  private INameSource nameSource ;
 public Speaker(string firstName, string surname, INameSource nameSource) …
Run Code Online (Sandbox Code Playgroud)

java unit-testing mocking jmock

11
推荐指数
1
解决办法
6958
查看次数

有没有工具使用hamcrest Factory注释?

我坐下来,今天写一个匹配,并决定采取快速查找在JMock的文档刷新我对进程的内存,并注意到在org.hamcrest.Factory注释的参考.注释的文档说明.

标记Hamcrest静态工厂方法,以便工具识别它们.工厂方法等同于命名构造函数.

是否有任何工具实际使用此注释?

java junit hamcrest jmock

10
推荐指数
1
解决办法
2007
查看次数