为 runnable class 创建 junit 测试
create junit test for runnable class
我有一个可运行的 class 如下所示,
public class WriteToOutputFile implements Runnable{
BlockingQueue<entry> queue;
File file;
volatile boolean processentries;
WriteToOutputFile(BlockingQueue queue,File file){
this.queue = queue;
this.file = file;
this.processentries= tue;
}
@Override
public void run(){
while(processentries && !queue.isEmpty())
entry = queue.take();
if (entry== lastentry)break;
//logic to write entries to file
}
public void stop(){
processentries = false;
queue.put(lastentry);
}
}
我想为这个 runnable 创建 Junit 测试用例。
由于我是编写 Junit 测试用例的新手,请告诉我最好的方法是什么。
我创建了如下所示的 Junit 测试,
testWriteToOutputFile{
@Test
functionalitytest(){
BlockingQueue queue = new BlockingQueue();
File file;
WriteToOutputFile workerthread = Powermockito.spy(
new WriteToOutputFile(queue,file));
Thread workerthread = new Thread(workerthread );
workerthread.start();
queue.put(entry);
workerthread.stop();
assertEquals(0,queue.size());
}
}
请帮助我,让我知道这种方法是否正确
要在单独的线程中测试 运行nable 运行ning,JUnit 测试应该 (1) 构造 运行nable,(2) 启动一个构造在 运行nable 上的线程运行启用,(3) 对一些条目进行排队,(4) 等待一小段时间,(5) 调用 stop(),以及 (6) 检查是否所有条目都已处理。
在这种情况下,您的代码将无法通过测试,因为您的 运行() 方法没有循环,因此只会处理第一个条目。它也没有任何用于处理条目的代码,还没有编译。
除了JUnit测试之外,您还需要对并发问题进行仔细的代码检查。例如,processEntries 需要是可变的。
我有一个可运行的 class 如下所示,
public class WriteToOutputFile implements Runnable{
BlockingQueue<entry> queue;
File file;
volatile boolean processentries;
WriteToOutputFile(BlockingQueue queue,File file){
this.queue = queue;
this.file = file;
this.processentries= tue;
}
@Override
public void run(){
while(processentries && !queue.isEmpty())
entry = queue.take();
if (entry== lastentry)break;
//logic to write entries to file
}
public void stop(){
processentries = false;
queue.put(lastentry);
}
}
我想为这个 runnable 创建 Junit 测试用例。 由于我是编写 Junit 测试用例的新手,请告诉我最好的方法是什么。 我创建了如下所示的 Junit 测试,
testWriteToOutputFile{
@Test
functionalitytest(){
BlockingQueue queue = new BlockingQueue();
File file;
WriteToOutputFile workerthread = Powermockito.spy(
new WriteToOutputFile(queue,file));
Thread workerthread = new Thread(workerthread );
workerthread.start();
queue.put(entry);
workerthread.stop();
assertEquals(0,queue.size());
}
}
请帮助我,让我知道这种方法是否正确
要在单独的线程中测试 运行nable 运行ning,JUnit 测试应该 (1) 构造 运行nable,(2) 启动一个构造在 运行nable 上的线程运行启用,(3) 对一些条目进行排队,(4) 等待一小段时间,(5) 调用 stop(),以及 (6) 检查是否所有条目都已处理。
在这种情况下,您的代码将无法通过测试,因为您的 运行() 方法没有循环,因此只会处理第一个条目。它也没有任何用于处理条目的代码,还没有编译。
除了JUnit测试之外,您还需要对并发问题进行仔细的代码检查。例如,processEntries 需要是可变的。