Tag: 集成测试

为什么组件扫描不适用于Spring Bootunit testing?

服务类FooServiceImpl使用@Service aka @Component进行注释,这使其有资格进行自动assembly。 为什么在unit testing期间没有拾取和自动assembly此类? @Service public class FooServiceImpl implements FooService { @Override public String reverse(String bar) { return new StringBuilder(bar).reverse().toString(); } } @RunWith(SpringRunner.class) //@SpringBootTest public class FooServiceTest { @Autowired private FooService fooService; @Test public void reverseStringShouldReverseAnyString() { String reverse = fooService.reverse(“hello”); assertThat(reverse).isEqualTo(“olleh”); } } 测试无法加载应用程序上下文, 2018-02-08T10:58:42,385 INFO Neither @ContextConfiguration nor @ContextHierarchy found for test […]

Maven文件夹布局:我应该在EAR或其子模块中放置测试吗?

我们有一个包含多个子模块的EAR项目(多个EJB,Web项目,应用程序客户端等)。 单一测试的自然范围是它们各自的子模块(因为它们应该是测试隔离单元)。 在很短的时间内,我们引入了非显而易见的测试依赖项。 项目正在嘲笑其他项目的function等。很快我们的架构演变成了几个带有模拟的独立jar文件(web项目1模拟,ejb 2模拟等); 我们将这些嘲讽与EAR连接起来并消耗子模块中的模拟(“Skinny War”风格)。 EAR Modules WEB 1 WEB 2 EJB 2 EJB 3 etc Libs Shared library 1 Shared Library 2 Testing dependencies WEB 1 mocks WEB 2 mocks EJB 1 mocks EJB 2 mocks etc WEB1 Uses EJB 1 and EJB 3 Uses Shared Library 1 Testing Consumes EJB 1 […]

使用Maven构建单独的JAR文件,以便对自定义类加载器进行unit testing

作为我当前项目的一部分,我创建了一个自定义类加载器。 自定义加载器的部分unit testing涉及使用一些JAR文件来演示加载器的正确行为。 我想在运行实际的unit testing之前从Java源构建测试JAR文件。 此外,测试JAR文件在运行unit testing时不能在类路径上,因为我想在测试执行期间动态加载它们。 是否有一种标准模式可以实现这种“在测试阶段之前在一侧构建一些JAR但是将它们排除在类路径之外”的要求? 我不敢相信我是第一个尝试使用Maven 2的人,但我似乎无法找到合适的POM结构和依赖关系。 通常我最终会在测试阶段之前没有构建一些测试jar,但是我也遇到了不一致的构建顺序的问题,导致构建在一台机器上正常工作,但是无法构建一些测试另一个jar子。

是否可以更好地替代Groovy for Java集成测试?

我打算使用其编程接口测试我的基于Java的Web应用程序。 为此,我打算使用他们的RMI / WebService接口调用我的会话bean,并检查他们支持的服务是否正确。 为此,我需要一种脚本语言: 调用我的RMI / WebService接口 执行SQL语句(例如,首先清理DB) 有一个简单的流量控制(循环,条件等) 容易理解。 我可能会要求我的非程序员编写测试脚本 我打算将Groovy用于此目标。 Groovy有更好的建议或替代方案吗? 编辑1 在答案中提到的其他介绍的Groovy替代品是JRuby和RSpec。 网上有没有比较?

我想测试一个私有方法 – 我的设计有问题吗?

所以我对软件测试非常陌生,我正在考虑为我的一个应用程序添加几个测试。 我有一个公共方法addKeywords(),它沿途调用私有方法removeInvalidOperations()。 这种私有方法调用外部API并且是大约50行代码。 我认为这是一个有点复杂的方法,我想通过调用addKeyword()方法来测试它,而不必这样做。 但这似乎不可能(至少不是JUnit)。 我所看到的信息表明,测试私有方法的愿望可能是代码味道。 有些人认为这可能表明这应该被重构为一个单独的类并公之于众。 此外,还有一些建议是,如果您确实需要,则可以对生产代码进行编辑,例如更改私有方法的可见性。 我真的不明白为什么我当前的代码设计有问题,但也不喜欢编辑我的生产代码以满足我的测试需求的想法。 正如我所说 – 我对测试很新,所以任何帮助都非常感谢。 另外,如果有任何进一步的信息,我可以告诉我,以帮助解答。

如何在集成测试中模拟Amazon S3

我正试图让我的应用程序的“行走骨架”将使用S3进行持久化。 我想使用假的S3服务,这样每个开发人员的桌面都可以随意读/写。 我认为mocks3会很完美,因为我可以在我的jUnit测试中得到一个docker服务器。 问题是mocks3不允许任何写入 。 据我所知,甚至没有设置它。 那么别人怎么做呢?

图像下载java的集成测试

我正在尝试编写集成测试,以查看是否从URL正确下载了文件。 我不确定如何测试这个,因为我希望在byte []中获取文件,但我不确定我正在比较它的图像。 我想过手动下载文件然后将其转换为字节并获取结果并将其粘贴到代码中作为预期值,然后将其与我得到的结果进行比较。 如果你有更好的主意,我会很高兴听到它。 谢谢:)

从脚本中填充内存hsqldb数据库

有没有办法可以在指向我的内存hsqldb实例的连接字符串中指定一个脚本? 我正在看这篇文章看起来有可能,但我不确定如何正确地制定字符串或在哪里放置脚本文件。 在这里查看 hsqldb文档似乎并非如此。 从Java测试中我可以选择使用它吗? 这与之前的hsqldb问题相关,此处从unit testing开始和停止hsqldb

使用不同的Spring属性进行集成测试

我正在使用Selenium测试一个使用Spring开发的Web应用程序来检查Web应用程序是否为用户显示了正确的内容,并且他能够执行规范中的所有操作。 其他开发人员正在使用内存中的假Hibernate数据库(HSQLDB)进行unit testing。 显然,我必须使用程序使用的真实数据库进行测试。 Spring应用程序上下文的JDBC参数由Spring在运行时加载(或编译时用于构建WAR文件)。 Spring使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer找到的属性来配置webapp和测试的应用程序上下文,并且测试和webapp共享XML配置文件。 根据Maven配置文件,unit testing或集成测试,属性需要不同。 我尝试了几种方法,没有成功: 使用较低级别的SQL查询开发自己的DAO。 这是浪费时间和最后的解决方案。 由于外键约束和数据库模型的更改,并且鉴于应用程序具有相当稳固(经过unit testing)的DAO集,它确实是最愚蠢的选项。 使用Mavenfilter并在那里定义JDBC属性。 问题是属性在主应用程序和unit testing之间共享,因为tomcat:redeploy目标包括unit testing。 然后应用程序无法连接到真正的数据库。 在不同文件夹中具有不同属性。 Spring根本不关心配置文件的Surefire配置中定义的额外资源,无论是使用testResources还是资源 。 奇怪的是,这种方法非常适用于为主应用程序中的每个环境提供不同的JDBC参数。 我们在src / main / resources中有几个文件夹,其中包含覆盖src / main / resources中默认属性的属性。 它对src / test / resources的工作方式不同。 我甚至不知道如何找到这种行为的原因。 让Spring根据用户定义的Maven参数加载不同的属性文件。 相同的属性用于主应用程序和unit testing。 当它无法找到属性文件时,Spring也会抱怨(强迫我创建带有空文件的目录只是为了让构建完成)。 为什么当前的构建配置与开发人员配置文件(开发人员,测试服务器……)+测试配置文件(单元测​​试)同时运行且属性没有相互覆盖? 因为Maven会在启动unit testing时使Spring查看src / test / resources,并在启动构建目标时查看src / main / resources。 不幸的是,没有像这样的集成测试的默认配置。

OpenEJB本地客户端注入失败

请注意,我正在非常仔细地反映这里给出的例子 。 事实上,我的情况有点简单,因为我现在甚至没有使用持久性单元进行测试。 我的测试项目提供了一个简单的MDB和一个会话bean; MDB和会话bean都正常加载,并且可以在没有注入的情况下成功测试(以约束的方式)。 在我的unit testing中使用@LocalClient注释的建议注入失败,出现已知错误: javax.naming.NamingException: Unable to find injection meta-data for [your-class]. Ensure that class was annotated with @org.apache.openejb.api.LocalClient and was successfully discovered and deployed. See http://openejb.apache.org/3.0/local-client-injection.html 当我访问此页面时,它通知我可能需要为我的测试用例上下文设置添加额外的属性。 所以现在看起来像: @Override public void setUp() throws Exception { initializeContext(); } public void initializeContext() { Properties p = new Properties(); p.put(Context.INITIAL_CONTEXT_FACTORY, “org.apache.openejb.client.LocalInitialContextFactory”); // the property […]