我正在尝试为一个类编写测试,该类具有从属性文件注入的字段值。我试图在运行TestNG测试时利用TestPropertySource
注释获取其中的值,但它似乎忽略了我的属性文件。
有几十个类似的问题,我试着仔细阅读,并尽可能尝试它们的实现。但我的问题似乎略有不同,原因如下:
>
@TestProperty tSource和@Property tySource不适用于JUnit:谈论JUnit而不是TestNG(可能相关,也可能不相关?)它还讨论了将属性值注入测试类(与被测试的单元相反)上的字段。
“@TestPropertySource不工作?”:讨论如何忽略丢失的属性,而不是如何修复它。
"@TestProperty tySource未加载属性":还讨论了将值注入到测试类字段中(尝试了@RunFor
或@SpringBootTest
,但也没有帮助)。
谷歌搜索结果中的其他链接也没有帮助。
你需要做什么才能让一个单元在测试中使用@Value
注释字段设置属性?我是否可以请求spring为我提供类的实例,而不是自己创建它们?
这里有一个小程序。
福。JAVA
package nl.jeroenheijmans.stackoverflow.testngprops;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Foo {
@Value("${my.prop}")
private String myProp;
public String ExposeProp() {
return myProp;
}
}
足部的。JAVA
package nl.jeroenheijmans.stackoverflow.testngprops;
import org.springframework.test.context.TestPropertySource;
import org.testng.Assert;
import org.testng.annotations.Test;
@TestPropertySource("classpath:application.properties")
public class FooTest {
@Test
public void sanityCheck(){
Foo foo = new Foo();
Assert.assertNotNull(foo); // Success!
}
@Test
public void testProperty() {
Foo foo = new Foo();
Assert.assertEquals(foo.ExposeProp(), "checkcheck"); // Fail!
}
}
应用属性(在主
和测试
文件夹中)
my.prop=checkcheck
主要的JAVA
package nl.jeroenheijmans.stackoverflow.testngprops;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication
@PropertySource(value = {"classpath:application.properties"})
public class Main extends SpringBootServletInitializer {
public static void main(String... args) {
SpringApplication.run(Main.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Main.class);
}
}
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nl.jeroenheijmans.stackoverflow</groupId>
<artifactId>testngprops</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${org.springframework.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>${testng.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<java.version>1.8</java.version>
<maven.compiler.version>3.5</maven.compiler.version>
<org.springframework.boot.version>1.5.1.RELEASE</org.springframework.boot.version>
<testng.version>6.9.10</testng.version>
<mockito.version>1.9.5</mockito.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
我是这样解决的。
简而言之,我认为您缺少了扩展org的部分。springframework。测验上下文testng。AbstractTestNGSpringContextTests
并通过@Autowire
注释对对象Foo
使用依赖项注入。由于您正在实例化Foo
对象,因此没有向其中注入值,这就解释了断言失败的原因。
主要的JAVA
package com.rationaleemotions.stackoverflow.qn45716815;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.PropertySource;
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@PropertySource(value = {"classpath:application.properties"})
public class Main extends SpringBootServletInitializer {
public static void main(String... args) {
SpringApplication.run(Main.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Main.class);
}
}
使用@SpringBootApplication(exclude={MongoAutoConfiguration.class,MongoDataAutoConfiguration.class})
的原因可以在这个线程中找到:Mongo试图自动连接到端口27017(localhost)
更新:排除Mongo配置是可选的,如果你有一个为Mongo正确设置的项目,你不需要这样做。
下面是最脚的。java看起来像
package com.rationaleemotions.stackoverflow.qn45716815;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.Assert;
import org.testng.annotations.Test;
@TestPropertySource("classpath:application.properties")
@SpringBootTest
public class FooTest extends AbstractTestNGSpringContextTests{
@Autowired
private Foo foo;
@Test
public void sanityCheck() {
Assert.assertNotNull(foo);
}
@Test
public void testProperty() {
Assert.assertEquals(foo.ExposeProp(), "checkcheck");
}
}
下面是我的maven依赖项的样子
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.6.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.5.6.RELEASE</version>
<scope>test</scope>
</dependency>
在spring boot starter日志中添加排除的原因可以在这里找到:在spring boot中禁用Logback
更新:排除logback是可选的,如果你有一个项目是正确设置的,可以使用logback。
以下是我运行此测试时的输出:
objc[36167]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java (0x1026784c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x1027404e0). One of the two will be used. Which one is undefined.
log4j:WARN No appenders could be found for logger (org.springframework.test.context.BootstrapUtils).
log4j:WARN Please initialize the log4j system properly.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.6.RELEASE)
===============================================
Default Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================
我是配置硒的新手。寻找路过的司机找到此解决方案https://stackoverflow.com/a/35101914/7104440我想知道是否有可能以这种方式从浏览器中注入许多驱动程序。是否可以绑定不同的驱动程序?我收到错误代码: 1)不允许绑定到null实例。如果这是您的预期行为,请使用Providers.of(null))。在assecobs.driver.DriverModule.con
我试图通过testng运行简单的Cucumber/Java测试。xml。 所以,我有testng。xml: 我用的是runner。类,在其中我将路径/选项/etc设置为功能文件、步骤和报告: 但是当我运行testng时。xml作为TestNG套件,它: 1) 通过我自己的设想, 但是 我做错了什么?
我对SpringBeans的正确配置有问题。我的整个应用程序在Spring上运行正常,我想添加jUnit测试。不幸的是,豆子注射不当。我在同一个模块中有两个目录。我的整个应用程序都在里面: /src/main/java/main/ 这是正确的,我添加了restest。java和Beantest配置。java内部: /src/test/java/main/ 和配置BeanTestConfigurat
似乎我在Spring 4.1.17中使用Spring Boot1.2.6.RELEASE做的任何事情都不起作用。我只想访问应用程序属性并在必要时使用test覆盖它们(无需使用hack手动注入Property tySource) 这不工作... 这也不是. 也不是这个... 完整的测试用例... 导致 似乎3.x和4.x之间有很多相互矛盾的信息,我找不到任何可以肯定的东西。 如有任何见解,将不胜感激
问题内容: Spring在以下方面很好地支持JUnit:使用和注释,事情看起来非常直观 该测试将能够在Eclipse&Maven中正确运行。我想知道TestNG是否有类似的东西。我正在考虑迁移到“下一代”框架,但没有找到与Spring测试匹配的对象。 问题答案: 它也可以与TestNG一起使用。
Summary NoSQL databases provide looser consistency restrictions than traditional SQL databases. By requiring fewer relational constraints and consistency checks, NoSQL databases often offer performanc