小编Bet*_*sta的帖子

如何模拟对象构造?

有没有办法在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是否能够动态模拟每个方法?

我的猜测是否定的,因为那会非常复杂.但是知道我正在咆哮错误的树也很有价值:-)

java tdd junit mocking

6
推荐指数
1
解决办法
8986
查看次数

添加exec-maven-plugin的附加路径

我想为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)

我该如何配置?

java maven-2 maven-plugin

6
推荐指数
2
解决办法
1万
查看次数

如何使用Spring获取Enum的值

<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属性?

java enums spring

6
推荐指数
1
解决办法
5966
查看次数

Eclipse WTP在Tomcat服务器中部署依赖项的奇怪行为

我的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在Tomcat服务器上部署Web应用程序时,正常的过程是什么?

以下是运行后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)

eclipse tomcat eclipse-wtp maven

6
推荐指数
1
解决办法
4427
查看次数

Logback SyslogAppender stacktrace日志记录前缀

我们最近从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)

java syslog logback

6
推荐指数
1
解决办法
4175
查看次数

RESTEasy Mock vs. Exception Mapper vs. Context

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)

java exception mocking resteasy

6
推荐指数
1
解决办法
6191
查看次数

Spring:如何在Spring配置中注入ENUM?

我有一个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)

java enums spring

6
推荐指数
1
解决办法
1万
查看次数

密钥库密码太短-导入时必须至少包含6个字符

我想使用/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的更高版本中不起作用,但评论已删除,请注意或让我们知道,因为我不知道我正在测试的版本。

keytool

6
推荐指数
1
解决办法
5076
查看次数

如何在spring boot中使用logback和SLF4J的MDC来捕获POST请求json中的唯一跟踪?

我们正在使用:

  • 弹簧靴
  • Slf4J
  • 登录
  • ELK 栈

现在,我们要使用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)

任何人都可以提供一些关于如何完成这项工作的帮助吗?

logging logback slf4j mdc spring-boot

6
推荐指数
2
解决办法
1万
查看次数

Maven 程序集:从依赖项的特定子文件夹中复制

我正在使用 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。

编辑注意:我知道这不是一个非常正确的要求,因为我们不应该知道工件内部有什么,正确的方法是声明将整个工件提取到目标目录(简洁的声明方法)。

maven maven-assembly-plugin

5
推荐指数
1
解决办法
4811
查看次数