有没有办法在Java中使用JMock模拟对象构造?
例如,如果我有这样的方法:
public Object createObject(String objectType) {
if(objectType.equals("Integer") {
return new Integer();
} else if (objectType.equals("String") {
return new String();
}
}
Run Code Online (Sandbox Code Playgroud)
...有没有办法模拟测试方法中对象构造的期望?
我希望能够对某些构造函数被调用的期望,而不是额外的代码来检查类型(因为它不会像我的例子那样复杂和简单).
所以代替:
assertTrue(a.createObject() instanceof Integer);
Run Code Online (Sandbox Code Playgroud)
我可以期待某个构造函数被调用.只是为了使它更清洁,并以更易读的方式表达实际测试的内容.
请原谅这个简单的例子,我正在处理的实际问题有点复杂,但是期望会简化它.
更多背景:
我有一个简单的工厂方法,它创建包装器对象.被包装的对象可能需要在测试类中难以获得的参数(它是预先存在的代码),因此很难构造它们.
也许接近我实际想要的是:有没有办法一次性模拟整个类(使用CGLib),而没有指定每个方法来存根?
所以mock被包装在一个构造函数中,所以很明显可以在它上面调用方法,JMock是否能够动态模拟每个方法?
我的猜测是否定的,因为那会非常复杂.但是知道我正在咆哮错误的树也很有价值:-)
我想为exec-maven-plugin添加一个额外的类路径.
除了%classpath,我想添加一个额外的路径到包含资源的目录(/ Users/kornp/resources).目前,我的pom看起来像这样:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<configuration>
<executable>java</executable>
<classpathScope>runtime</classpathScope>
<arguments>
<argument>%classpath:/Users/kornp/resources</argument>
<argument>org.drrabbit.maventest.App</argument>
</arguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我该如何配置?
<bean id="xyz" class="com.abc" >
<property name="name">
<bean
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<property name="staticField" value="com.abc.staticname" />
</bean>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
这是我之前用来设置类com.abc名称的方法.现在,这些名字应该来自另一个枚举.如何访问枚举值以设置我的类com.abc的name属性?
我的Eclipse WTP在Tomcat部署过程中有一个奇怪的行为.我使用Eclipse 3.7(Indigo),WTP 3.3,没有 m2eclipse插件,Java 1.6,Tomcat 5.5.
我的应用程序是一个Web应用程序,其他一些项目作为依赖项,以及一些第三方依赖项.我的项目由Maven管理,当我们使用这个工具构建应用程序时,一切正常.
要使用Eclipse处理我的项目,我运行mvn eclipse:clean eclipse:eclipse然后,我在IDE中导入我的项目.
当我想在Tomcat 5.5服务器上部署此Web应用程序时(这个服务器由Eclipse管理),我的问题出现了.当我创建一个新的Tomcat服务器,并在其中部署my -project-portal应用程序时,它只添加了my-project-xxx依赖项,以及很少的第三方依赖项(大约有9个定义的).在我的一位同事桌面上(他正在使用Eclipse 3.5),根本没有部署第三方依赖,只有my-project-xxx JAR ......
但是,当我查看Web-app项目属性,在Java Build Path> Libraries或"Deployment Assembly"中时,依赖项列表是正确和完整的.
笔记
我使用较旧的Eclipse(3.3,使用WTP 3.1)进行了一些测试,但我没有遇到任何部署问题.但是,这个WTP仍在使用"Java EE Modules Dependencies",而不是最新的WTP版本.
到目前为止,我们使用了一个自定义的Maven插件,然后将mvn eclipse:eclipse所有依赖项(包括传递的)复制到其中my-webapp-project/WebContent/WEB-INF/lib.这样做,Eclipse自动部署了这些依赖项的内容,因此,我们获得了Tomcat服务器中的所有依赖项.
问题
WEB-INF/lib目录中的所有依赖项吗?以下是运行后Eclipse配置文件的摘录mvn eclipse:eclipse:
的.classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" sourcepath="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/asm/asm/2.2.2/asm-2.2.2.jar" sourcepath="M2_REPO/asm/asm/2.2.2/asm-2.2.2-sources.jar"/>
<classpathentry kind="src" …Run Code Online (Sandbox Code Playgroud) 我们最近从Log4J切换到Logback.除了SyslogAppender中的堆栈跟踪外,日志记录似乎运行良好.它们的前缀就像剩余的日志消息一样.
有没有办法如何禁用此前缀并确保它们将像Log4J SyslogAppender一样打印?提前致谢.
目前的行为:
Apr 02 12:31:08 host.name 2012-04-02T12:31:08.418+0200 ajp-bio-8009-exec-7 com.gooddata.exception.servlet.HttpExceptionTranslator ERROR: Processing client_request=/gdcwebapp/gdc/projects/FoodMartDemo/groups/everyone status=FAILED errorCode=gdc.usergroups.default_group_modification errorDescription="Attempt to modify default group (everyone)" exceptionId=abc37cf0-9c56-4e68-a4a7-2111ca823fd4 component=webapp request_id=cAWvICOaKVFF1VvI userId=1 projectId=FoodMartDemo nodeId=nodeOne nodeId=nodeOne, requestId=cAWvICOaKVFF1VvI, userId=1, projectId=FoodMartDemo
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Apr 02 12:31:08 host.name #011at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Apr 02 12:31:08 host.name #011at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Apr 02 12:31:08 host.name #011at java.lang.reflect.Method.invoke(Method.java:601)
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
Apr 02 12:31:08 host.name #011at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
Apr 02 12:31:08 host.name #011at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
Apr 02 12:31:08 host.name #011at …Run Code Online (Sandbox Code Playgroud) RESTEasy模拟框架在没有异常映射器的情况下工作正常 - 接收请求并返回具有预期内容的实体.
注册异常映射器并强制异常后,当RESTEasy内部调用ResteasyProviderFactory.getContextData(type)时调用失败,返回null,导致出现意外错误消息:"无法找到类型的上下文数据:javax.servlet.http.HttpServletRequest" .
无法在网上任何地方找到RESTEasy模拟加上异常映射器的任何示例,也无法找到有关错误的任何有用信息.
客户类:
package com.foo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "foo-type", propOrder = {
"name"
})
@XmlRootElement(name = "foo")
public class Foo {
protected String name;
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
}
Run Code Online (Sandbox Code Playgroud)
对象工厂:
package com.foo;
import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {
public ObjectFactory() {
}
public Foo createFoo() {
return new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
验证异常:
package com.foo;
public …Run Code Online (Sandbox Code Playgroud) 我有一个ENUM为
package com.myorg.sparrow.s3Environment;
import javax.annotation.Nonnull;
public enum DocumentType {
Document("document/", ".xml.gz", "binary/octet-stream", "gzip", true);
private final String path;
private final String suffix;
private final String contentType;
private final String contentEncoding;
private final Boolean compress;
private DocumentType(@Nonnull final String path, @Nonnull final String suffix,
@Nonnull final String contentType, @Nonnull final String contentEncoding,
@Nonnull final Boolean compress) {
this.path = path;
this.suffix = suffix;
this.contentType = contentType;
this.contentEncoding = contentEncoding;
this.compress = compress;
}
@Nonnull
public String getPath() {
return …Run Code Online (Sandbox Code Playgroud) 我想使用/sf/answers/496583111/将pem导入p12,但是keystore密码为5个字符,keytool抱怨它必须为6:-/
keytool -import -alias alias -keystore ./trust.p12 -storetype PKCS12 -file new.pem
Enter keystore password:
Keystore password is too short - must be at least 6 characters
Run Code Online (Sandbox Code Playgroud)
编辑:
有评论,此评论在keytool的更高版本中不起作用,但评论已删除,请注意或让我们知道,因为我不知道我正在测试的版本。
我们正在使用:
现在,我们要使用MDC将 POST 请求 JSON 中提供的唯一跟踪号添加到给定请求的每个日志语句中。
我在谷歌上搜索了一些博客文章,这些对我来说没什么用。
下面是logback.xml我们正在使用的
<configuration>
<property name="PROJECT_ID" value="template-api"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一些关于如何完成这项工作的帮助吗?
我正在使用 Maven 程序集插件来构建我们产品的 WAR(之前由 Ant 完成)。由于 Apache Ant 有许多遗留问题,因此有一个特定的要求可以使构建过程变得更容易:将依赖项的特定子文件夹(例如 jar 或 war 资源)复制到特定的目标子文件夹。
到目前为止,我了解到程序集描述符允许指定<outputDirectory>,但是有没有机会指定<sourceDirectory>?例如,我想将此规则应用于单个 WAR 或 JAR 类型依赖项。
考虑这个程序集描述符片段的示例(不是 100% 准确):
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>my-specific-dependency:war</include>
</includes>
<outputDirectory>WEB-INF/myresources</outputDirectory>
</dependencySet>
Run Code Online (Sandbox Code Playgroud)
我想说我想将某些文件夹从 my-specific-dependency:war 复制到 WEB-INF/myresources。
编辑注意:我知道这不是一个非常正确的要求,因为我们不应该知道工件内部有什么,正确的方法是声明将整个工件提取到目标目录(简洁的声明方法)。