Tag: mockito

在这里检测到错位的参数匹配器。 您不能在Mockito中使用validation或存根之外的参数匹配器

在BundleProcessorTest.java中的以下两个测试用例中,我遇到了exception,但是,我的第一个测试用例成功通过了。 org.mockito.exceptions.misusing.InvalidUseOfMatchersException:这里检测到错位的参数匹配器: – > at bundle.test.BundleProcessorTest.bundlePluginShouldNotBeNull(BundleProcessorTest.java:22) 您不能在validation或存根之外使用参数匹配器。 正确使用参数匹配器的示例:when(mock.get(anyInt()))。thenReturn(null); doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject()); validation(模拟).someMethod(包含( “富”)) 此外,此错误可能会显示,因为您使用参数匹配器与无法模拟的方法。 以下方法无法进行存根/validation:final / private / equals()/ hashCode()。 在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)中的bundle.test.BundleProcessorTest.bundlePluginCollectionShouldNotBeNull(BundleProcessorTest.java:28) 请在下面找到简化的代码清单: – BundlePlugin.java package bundle; import java.util.List; public class BundlePlugin { private final String pluginName ; private final List featureContent ; public BundlePlugin(String pluginName, List featureContent) { super(); this.pluginName = pluginName; this.featureContent = featureContent; } […]

为Factory类创建的对象注入Mocks

我有以下课程: public class MyClass { private Apple apple; public void myMethod() { apple = AppleFactory.createInstance(someStringVariable); …. …. …. } } 和测试类: @RunWith(MockitoJUnitRunner.class) public class MyClassTest { @InjectMocks MyClass myClass; @Test public void myMethod(){ … … … } } 我如何在MyClass中将Apple实例注入模拟?

如何在Mockito中更改字符串的默认返回值?

2010年的这个问题暗示了我正在努力做的事情。 我正在进行unit testing,该测试运行代码,需要许多模拟对象来完成它需要做的事情(测试HTML + PDF渲染)。 为了使这个测试成功,我需要生成许多模拟对象,并且每个对象最终都会将一些String数据返回给被测试的代码。 我想我可以通过实现我自己的Answer类或IMockitoConfiguration来实现这IMockitoConfiguration ,但我不确定如何实现它们,因此它们只会影响返回字符串的方法。 我觉得以下代码接近我想要的。 它抛出一个强制转换exception, java.lang.ClassCastException: java.lang.String cannot be cast to com.mypackage.ISOCountry 。 我认为这意味着我需要以某种方式默认或限制Answer仅影响String的默认值。 private Address createAddress(){ Address address = mock(Address.class, new StringAnswer() ); /* I want to replace repetitive calls like this, with a default string. I just need these getters to return a String, not a specific string. […]

Mockitovalidation了特定的lambda在mock的方法中作为参数传递

我想测试以下方法: public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) { handler.registerMessage(() -> { dispatcher.dispatch(argument1, argument2, argument3); }); } 其中MessageHandler是一个辅助类,它将以lambda的forms接受Functional Interface实现,并将其存储以供以后执行。 有没有办法validationmockito已使用特定的lambda表达式调用MessageHandler的dispatchMessage方法: 意思是,我可以写一个这样的测试: @Test public void testDispatchMessage_Success() throws Exception { myMessageDispatcher.dispatchMessage(handler, “activityId”, “ctxId”, 1l, ); verify(handler, times(1)).dispatchMessage(() -> { dispatcher .dispatch(“activityId”, “ctxId”, 1l,); }); } } 此测试将导致断言错误:参数不同! 通缉: ……Tests$$Lambda$28/379645464@48f278eb 实际调用有不同的参数: ……….Lambda$27/482052083@2f217633 这是有道理的,因为mockito试图比较function接口的两个不同实现,它们具有不同的哈希码。 那么还有其他方法可以validation方法dispatchMessage()是否已使用返回void的lambda调用,并且具有dispatcher.dispatch(“activityId”, “ctxId”, […]

如何对读取给定文件的方法进行unit testing

我知道这有点天真。 如何在不给物理文件作为输入的情况下对这段代码进行unit testing。 我是模拟和unit testing的新手。 所以我不确定。 请帮忙。 public static String fileToString(File file) throws IOException { BufferedReader br = new BufferedReader(new FileReader(file)); try { StringBuilder sb = new StringBuilder(); String line = br.readLine(); while (line != null) { sb.append(line); sb.append(“\n”); line = br.readLine(); } return sb.toString(); } finally { br.close(); } }

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); } }

mockito:如何取消模拟方法?

我有一个JUnit类,使用不同的方法来执行不同的测试。 我使用Mockito在真实实例上创建一个间谍,然后覆盖一些与我执行的实际测试无关的方法。 有没有办法,只是为了清理我以防万一我的测试后运行的其他测试也使用相同的实例,可能会执行一个模拟的方法,他们没有要求模拟,取消模拟方法? 说我有一个名为‘wareHouseSpy’的间谍对象 说我重写方法isSomethingMissing : doReturn(false).when(wareHouseSpy).isSomethingMissing() 什么是正确的方式来取消覆盖,并使间谍恢复正常,即使下一次调用isSomethingMissing来运行真正的方法? 就像是 doReturn(Mockito.RETURN_REAL_METHOD).when(wareHouseSpy).isSomethingSpy() 或者可能 Mockito.unmock(wareHouseSpy) 谁知道? 我在那个地方找不到任何东西 谢谢! 阿萨夫

模拟Mockito 2的最后一堂课

我正在从我正在进行的项目中删除Powermock,所以我试图仅用Mockito(mockito-core-2.2.28)重写一些现有的单一测试。 当我运行测试时,我有以下错误: org.mockito.exceptions.base.MockitoException: 不能模拟/间谍类com.ExternalpackagePath.Externalclass Mockito不能嘲笑/间谍,因为: 最后一堂课 我知道这个问题已经被问过了( 如何使用mockito模拟最终类 , Mock对象使用Mockito调用最终类静态方法 ),但我找不到我正在寻找的答案。 这是我的代码的摘录: public class MyClassToTest extends TestCase { private MyClass myClass; @Mock private Externalclass ext; // This class is final, I would like to mock it @Override protected void setUp() throws Exception { MockitoAnnotations.initMocks(this); // <<<< The exception is thrown here ext = Mockito.mock(Externalclass.class); } […]

将模拟对象注入要在测试中声明为测试的对象的测试对象使用Mockito不起作用?

我有一个class级,我正在为我的服务注入代理。 Service service { private ServiceProxy proxy; public Service(ServiceProxy proxy) { this.proxy = proxy; } } 对它的测试是: ServiceTest { @Mock ServiceProxy mockProxy; Service service = new Service(mockProxy); } 如果我像这样初始化我的类,当我想使用服务对象时,我总是得到一个NPE 。 为什么Mockito这样做? 有什么方法可以解决这个问题,而不是在每次测试中声明它?

GWT模拟框架的综合优势/缺点

我有兴趣为我的GWT应用程序使用正确的模拟框架。 据我所知,Mockito,EasyMock和jMock是Java最受欢迎的一些。 有人可以列出他们最熟悉的模拟框架的优缺点,因为它与GWT有关,可以帮助GWT测试像我这样的人吗? 提前致谢。