如下所示,有两种简单的方法可以制作流式复印机(介绍Apache Commons或类似工具的栏)。我应该去哪一个?为什么?
public class StreamCopier {
private int bufferSize;
public StreamCopier() {
this(4096);
}
public StreamCopier(int bufferSize) {
this.bufferSize = bufferSize;
}
public long copy(InputStream in , OutputStream out ) throws IOException{
byte[] buffer = new byte[bufferSize];
int bytesRead;
long totalBytes = 0;
while((bytesRead= in.read(buffer)) != -1) {
out.write(buffer,0,bytesRead);
totalBytes += bytesRead;
}
return totalBytes;
}
}
与
public class StreamCopier {
public static long copy(InputStream in , OutputStream out)
throws IOException {
return this.copy(in,out,4096);
}
public static long copy(InputStream in , OutputStream out,int bufferSize)
throws IOException {
byte[] buffer = new byte[bufferSize];
int bytesRead;
long totalBytes = 0;
while ((bytesRead= in.read(buffer)) != -1) {
out.write(buffer,0,bytesRead);
totalBytes += bytesRead;
}
return totalBytes;
}
}
我将使用非静态(实例)版本,并将其作为显式依赖项(使用setter)提供给消费者:
编辑
为了回应(“有用!”)的评论“这如何帮助嘲笑?”,这是可能的工作方式:
class ThingThatUsesStreamCopier {
// our copier instance. set in constructor, but might equally use
// a setter for this:
private StreamCopier copier;
public ThingThatUsesStreamCopier(StreamCopier copier) {
this.copier = copier;
}
public void makeCopy(Stream in, Stream out) {
// probably something a little less trivial...
copier.copy(in, out);
}
}
当我进行测试时ThingThatUsesStreamCopier
,我可以创建a的模拟对象版本StreamCopier
并ThingThatUsesStreamCopier
使用此模拟实例化该对象。
这样,我就可以完全控制模拟的行为,因此我的测试与的任何实际实现都没有关联StreamCopier
。我仅测试消费者,而不测试消费者加消耗者。
问题内容: 我是一名初级android开发人员,几乎完成了第一个大型项目的alpha版本。我认为我对Java有很好的了解,但是我不确定我是否正确组织了我的应用程序。 简短说明: 我在我的应用程序中使用凌空库来发送和接收来自服务器的数据。因此,我创建了一个类来管理服务器方法。在该类中,我为需要的每个服务器连接创建了很多静态方法(如本例所示): 所以在我的活动中,我这样称呼 我的问题是: 这样调用服务
问题内容: 我有以下代码: 运行此命令时,我不断收到错误消息: 怎么解决呢? 问题答案: 您正在将 未绑定的 对象存储在字典中。通过访问名称作为类或实例上的属性,此类对象(以及对象,函数和对象)仅通过描述符协议进行绑定。直接访问类主体中的对象不是属性访问。 在 创建类 之后 创建字典(以便您将它们作为属性访问),或者显式绑定,或者在将它们存储在字典中之前提取原始函数。 注意,对对象的“绑定”仅意味
问题内容: 我正在寻找测试以下静态方法(特别是使用Doctrine模型)的最佳方法: 理想情况下,我将使用模拟对象来确保调用了“ fromArray”(具有提供的用户数据)和“ save”,但这是不可能的,因为该方法是静态的。 有什么建议么? 问题答案: PHPUnit的作者Sebastian Bergmann最近发表了一篇有关Stubbing和Mocking静态方法的博客文章。使用PHPUnit
问题内容: 尝试在页面对象中使用静态方法时,我遇到了NullPointerExceptions的麻烦。如果我使用非静态方法进行操作,则效果很好。 非静态版本: 这很好。日期字段已设置。 静态版 这不起作用,并在标有“ *”的行(访问WebElement的行)上导致java.lang.NullPointerException。 我有点喜欢在测试中使用像这样的静态方法,因为我并没有真正看到它的问题,它
本文向大家介绍IOS 静态方法与动态方法详解,包括了IOS 静态方法与动态方法详解的使用技巧和注意事项,需要的朋友参考一下 IOS 静态方法与动态方法详解 1、问题提出 iOS中有静态方法与动态方法,那么两种方法的异同是什么? 2、问题分析 因为每个对象都由相应的数据结构与方法相构成,一个程序可能有多个属于同一个类的对象,而每个对象的数据结构应该是不一的,但方法是相同的,若为每
我试图在静态方法中模拟静态方法。 我想知道不使用任何框架是否可能。 有没有办法达到我的目的?