我正在使用mockito来测试我的业务服务,它使用了我想要模拟的实用程序.对于具有不同参数的实用程序,每个服务方法至少有2-3个调用.
有没有推荐的方法来使用多个when(...).thenReturn(...)相同的方法但不同的参数?
我也想在any()里面使用游行者.可能吗?
更新:示例代码.
@Test
public void myTest() {
when(service.foo(any(), new ARequest(1, "A"))).thenReturn(new AResponse(1, "passed"));
when(service.foo(any(), new ARequest(2, "2A"))).thenReturn(new AResponse(2, "passed"));
when(service.foo(any(), new BRequest(1, "B"))).thenReturn(new BResponse(112, "passed"));
c.execute();
}
public class ClassUnderTest {
Service service = new Service();
public void execute() {
AResponse ar = (AResponse) service.foo("A1", new ARequest(1, "A"));
AResponse ar2 = (AResponse) service.foo("A2", new ARequest(2, "2A"));
BResponse br = (BResponse) service.foo("B1", new BRequest(1, "B"));
}
}
public class Service {
public Object foo(String firstArgument, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用两个线程添加String值ArrayList.我想要的是,当一个线程添加值时,另一个线程不应该干扰,所以我使用了该Collections.synchronizedList方法.但似乎如果我没有在对象上显式同步,则以不同步的方式完成添加.
没有显式同步块:
public class SynTest {
public static void main(String []args){
final List<String> list=new ArrayList<String>();
final List<String> synList=Collections.synchronizedList(list);
final Object o=new Object();
Thread tOne=new Thread(new Runnable(){
@Override
public void run() {
//synchronized(o){
for(int i=0;i<100;i++){
System.out.println(synList.add("add one"+i)+ " one");
}
//}
}
});
Thread tTwo=new Thread(new Runnable(){
@Override
public void run() {
//synchronized(o){
for(int i=0;i<100;i++){
System.out.println(synList.add("add two"+i)+" two");
}
//}
}
});
tOne.start();
tTwo.start();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
true one
true two
true one
true two …Run Code Online (Sandbox Code Playgroud) 在查看一些分析结果时,我注意到在紧密循环中使用流(使用而不是另一个嵌套循环)会导致类型java.util.stream.ReferencePipeline和对象的大量内存开销java.util.ArrayList$ArrayListSpliterator.我将有问题的流转换为foreach循环,并且内存消耗显着下降.
我知道溪流没有做出比普通环更好的表现的承诺,但我的印象是差异可以忽略不计.在这种情况下,似乎增加了40%.
这是我编写的用于隔离问题的测试类.我使用JFR监视内存消耗和对象分配:
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;
import java.util.function.Predicate;
public class StreamMemoryTest {
private static boolean blackHole = false;
public static List<Integer> getRandListOfSize(int size) {
ArrayList<Integer> randList = new ArrayList<>(size);
Random rnGen = new Random();
for (int i = 0; i < size; i++) {
randList.add(rnGen.nextInt(100));
}
return randList;
}
public static boolean getIndexOfNothingManualImpl(List<Integer> nums, Predicate<Integer> predicate) {
for (Integer num : nums) {
// Impossible condition
if (predicate.test(num)) {
return true; …Run Code Online (Sandbox Code Playgroud) 我在以下架构中有json对象:
{
name: "foo",
timestamp: 1475840608763,
payload:
{
foo: "bar"
}
}
Run Code Online (Sandbox Code Playgroud)
这里,该payload字段包含一个嵌入的json对象,该对象的模式是动态的,每次都不同.
的payload对象是不同的API服务,以及不同的API服务的不同方法获得的原始输出.无法将其映射到所有可能的值.
是否可以拥有一个java类,如下所示:
public class Event
{
public String name;
public long timestamp;
public JsonObject payload;
}
Run Code Online (Sandbox Code Playgroud)
或者沿着这些方向的东西,所以我可以接收基本模式并处理它,然后将它发送到相关的类,它将转换payload为适当的预期类?
我是Spring MVC的新手,我正在尝试在其中部署一个hello world应用程序.但是我总是在jsp页面上得到一个请求的资源不可用错误.我正在使用tomcat 7.这里我粘贴我的代码任何人请帮助..
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>HelloWorldSpring</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
为spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan
base-package="net.viralpatel.spring3.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
应用程序的控制器
package net.viralpatel.spring3.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorldController {
@RequestMapping("/hello")
public ModelAndView …Run Code Online (Sandbox Code Playgroud) 好的,这是我的问题.我必须这样做HashSet,我使用该removeAll方法删除一个集合中存在的值.
在调用方法之前,我显然将值添加到Sets中.我在添加之前调用.toUpperCase()每个String,因为两个列表中的值都是不同的情况.这个案子没有押韵或理由.
一旦我打电话removeAll,我需要将原始案例返回给剩下的值Set.有没有一种有效的方法可以在不运行原始列表和使用的情况下执行此操作CompareToIgnoreCase?
例:
列表1:
"BOB"
"Joe"
"john"
"MARK"
"dave"
"Bill"
Run Code Online (Sandbox Code Playgroud)
列表2:
"JOE"
"MARK"
"DAVE"
Run Code Online (Sandbox Code Playgroud)
在此之后,HashSet使用toUpperCase()on 为每个List 创建一个单独String的.然后打电话removeAll.
Set1.removeAll(set2);
Set1:
"BOB"
"JOHN"
"BILL"
Run Code Online (Sandbox Code Playgroud)
我需要让列表再次看起来像这样:
"BOB"
"john"
"Bill"
Run Code Online (Sandbox Code Playgroud)
任何想法将不胜感激.我知道它很差,应该有原始列表的标准,但这不是我要决定的.
你能告诉我它之间的区别是什么Thread.currentThread().getContextClassLoader(),TestServlet.class.getClassLoader()不要把它标记为重复,请解释并告诉我何时使用这些
Java文件:
package com.jar.test;
public class TestServlet {
public static void main(String args[]) {
ClassLoader cls = TestServlet.class.getClassLoader().loadClass(
"com.jar.test.TestServlet");
ClassLoader cls = Thread.currentThread().getContextClassLoader()
.loadClass("com.jar.test.TestServlet");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个自定义类加载器,它将JAR从自定义网络加载文件.最后,我必须使用的是JAR文件的字节数组.
我无法将字节数组转储到文件系统上并使用URLClassLoader.
我的第一个计划是JarFile从流或字节数组创建一个对象,但它只支持一个File对象.
我已经写了一些使用了JarInputStream:
public class RemoteClassLoader extends ClassLoader {
private final byte[] jarBytes;
public RemoteClassLoader(byte[] jarBytes) {
this.jarBytes = jarBytes;
}
@Override
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class<?> clazz = findLoadedClass(name);
if (clazz == null) {
try {
InputStream in = getResourceAsStream(name.replace('.', '/') + ".class");
ByteArrayOutputStream out = new ByteArrayOutputStream();
StreamUtils.writeTo(in, out);
byte[] bytes = out.toByteArray();
clazz = defineClass(name, bytes, 0, bytes.length);
if …Run Code Online (Sandbox Code Playgroud) 让我们假设一个简单的方法,它抛出一IndexOutOfBoundsException
对无效的索引(2d数组).
我如何测试,所有坏指数组合都会引发异常?
(当然,如果一个电话抛出异常,这个测试将不会继续)
@Test(expected = Exception.class)
public void validateIndices(){
check(0,-1);
check(-1,0);
check(0,COLS + 1);
check(ROWS + 1, 0);
}
Run Code Online (Sandbox Code Playgroud)
是否有一种常用的方法来测试方法的参数变化?
我安装了java jdk1.8.0_111并在ubuntu 16.04(32位)中安装了android studio,但是当我运行android studio时我收到了消息:
Error:Process 'command '/usr/local/android-studio/jre/bin/java'' finished with non-zero exit value 2

我该怎么办?
java ×10
classloader ×2
collections ×2
junit ×2
android ×1
arrays ×1
exception ×1
hashset ×1
jackson ×1
jar ×1
java-8 ×1
java-stream ×1
json ×1
jsp ×1
memory ×1
mockito ×1
spring ×1
spring-mvc ×1
ubuntu ×1
unit-testing ×1