Tag: jmock

使用MockMultipartHttpServletRequest进行unit testing(在ItemInputStream.makeAvailable中抛出NullPointerException)

我编写了一个带有HttpServletRequest的转换器类,并将其转换为另一种类型,该类型包含一个指向来自servlet请求的InputStream的指针。 (这个想法是从请求处理中抽象出传输传输协议,所以我也可以从FTP编写类似的转换器。) 现在我正在尝试为此编写一个unit testing,我遇到了问题。 我已经设法找出正确的样板来创建有效的Multipart HTTP请求(使用Spring类MockMultipartHttpServletRequest和MockMultipartFile),但现在我在UploadRequest类的initialize()方法中得到NullPointerException。 我猜测问题是,MockMultipartHttpServletRequest内部的流不是正确初始化,但我无法弄清楚我应该做些什么不同。 任何建议都会感激不尽! 这是堆栈跟踪: java.lang.NullPointerException at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976) at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886) at java.io.InputStream.read(InputStream.java:82) at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96) at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66) at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592) at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618) at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637) at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984) at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:965) at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331) at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148) at com.ooyala.UploadRequest.initialize(UploadRequest.java:51) at com.ooyala.UploadRequestTest.testCreateFromServletRequest(UploadRequestTest.java:57) 这是我的变压器类的缩写版本: public class UploadRequest { private Map params; private InputStream strIn; private Logger Log = Logger.getLogger(UploadRequest.class.getName()); public […]

如何模拟JdbcTemplate.queryForObject()方法

我的方法看起来像这样: public class Decompile extends JdbcDaoSupport public void getRunner(){ String val = this.getJdbcTemplate().queryForObject(sql,String.class, new Object[]{1001}); } } 请建议我如何嘲笑这个。

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

有时候,你想要测试一个类方法,并且你希望在调用超类方法时做一个期望。 我没有找到一种方法来使用easymock或jmock在java中做这个期望(我认为这是不可能的)。 有一个(相对)干净的解决方案,用超类方法逻辑创建一个委托,然后设置它的期望,但我不知道为什么以及何时使用该解决方案?任何想法/例子? 谢谢

unit testing辅助方法?

我有以前有大量方法的类,所以我将这个方法的工作细分为’helper’方法。 这些辅助方法被声明为private以强制封装 – 但是我想对大型公共方法进行unit testing。 对辅助方法进行unit testing也是好的,就好像其中一个方法失败了,调用它的公共方法也会失败,这样我们就可以找出它失败的原因了吗? 另外,为了使用模拟对象测试这些,我需要将其可见性从私有更改为受保护,这是否可取?

JMock允许其他方法调用

我正在使用JMock来测试使用对象的类的行为。 我想测试方法a()被调用。 但是, b()和c()也会在对象上调用。 因此,如果我期望a() ,它还必须期望b()和c()使测试通过。 有没有办法只测试某种方法,并允许其他任何方法?

关于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 … }}); 执行期间将引发以下exception: java.lang.IllegalArgumentException:并非所有参数都被赋予显式匹配器:要么所有参数都必须由匹配器指定,要么所有参数都必须由值指定,您不能混合使用匹配器和值。 为什么我不能这样做? 使用with(any(Klass.class)) ?

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

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

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

有没有一种简单的方法来匹配使用Hamcrest的字段?

我想测试一个对象的特定字段是否与我指定的值匹配。 在这种情况下,它是S3Bucket对象中的存储桶名称。 据我所知,我需要为此编写一个自定义匹配器: mockery.checking(new Expectations() {{ one(query.s3).getObject(with( new BaseMatcher() { @Override public boolean matches(Object item) { if (item instanceof S3Bucket) { return ((S3Bucket)item).getName().equals(“bucket”); } else { return false; } } @Override public void describeTo(Description description) { description.appendText(“Bucket name isn’t \”bucket\””); } }), with(equal(“key”))); … }}); 如果有一种更简单的方法可以做到这一点会很好,例如: mockery.checking(new Expectations() {{ one(query.s3).getObject( with(equal(methodOf(S3Bucket.class).getName(), “bucket”)), with(equal(“key”))); … }}); […]

jmock模拟静态方法

我的代码中有一个静态方法,我想以某种方式模拟。 我正在使用jmock。 我认为我可以这样做的一种方法是在静态方法周围使用“包装类”并模拟这个,但我希望有更好的解决方案。 我这是错误的方式吗? 反馈: 我将有一个接口和类有一个方法,只是调用静态方法。 它允许我通过模拟对这个包装类的调用来模拟逻辑。 (甚至谈论它我都觉得很脏:))