假设我想为类编写一个基准测试
,它可以是autowired
,因此我需要加载application context
。
我的测试有注释@org.openjdk.jmh.annotations.state(Scope.benchmark)
和main方法
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(MyBenchmark.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
当然,我有这样一些基准:
@Benchmark
public void countAllObjects() {
Assert.assertEquals(OBJECT_COUNT, myAutowiredService.count());
}
现在的问题是如何注入MyAutowiredService
?
可能的解决办法
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/application-context.xml");
context.getAutowireCapableBeanFactory().autowireBean(this);
@ContextConfiguration(locations = { "classpath:META-INF/application-context.xml" })
@Autowired
private MyAutowiredService myAutowiredService;
@RunWith(SpringJUnit4ClassRunner.class)
我从spring-cloud-sleuth找到了代码,它对我有用
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
public class DemoApplicationTests {
volatile DemoApplication app;
volatile ConfigurableApplicationContext context;
private VideoService videoService;
@Test
public void contextLoads() throws RunnerException {
Options opt = new OptionsBuilder()
.include(DemoApplicationTests.class.getSimpleName())
.forks(1)
.build();
new Runner(opt).run();
}
@Setup
public void setup() {
this.context = new SpringApplication(DemoApplication.class).run();
Object o = this.context.getBean(VideoService.class);
videoService = (VideoService)o;
}
@TearDown
public void tearDown(){
this.context.close();
}
@Benchmark
public String benchmark(){
return videoService.find("z");
}
我是spring的新手,我想知道是否可以只通过注释必须注入变量的类来加载应用程序(而不是使用ApplicationContext ctx=new ApplicationContext(“MyAppContext”))。 我举以下例子: 我有一个类,其中一个字符串应该是自动连线的 spring bean配置文件(testSpringContext.xml)如下所示 现在,我想使用中的以下代码显示自动
我在我的src/test/resources路径中创建了一个application-integrationtest.yaml,所以我的测试是针对创建的docker TestContainer运行的。问题是没有加载我的application-integrationtest.yaml。 我正在运行一个SpringBoot2.x应用程序 原因:org.springframework.beans.Bean
我得到的错误是: 我试图更改上下文配置的位置,如下所示:
我在Spring Framework上运行了几个集成测试,它们扩展了名为BaseitCase的基类。 ,如下所示: 问题是其中一个测试有几个声明:@mockbean,在执行这个测试的那一刻,Spring会重新创建上下文,随后的测试有时会使用错误的bean(来自为使用@mockbean的测试创建的上下文)。我通过检查bean有不同的hashcode就知道了这一点。 当我使用@EventListene
问题内容: 我有一个包含2个测试的测试类: 当我单独运行测试时,我不会出错,但是当我同时运行所有测试时,会失败。失败是由于某些测试修改了应用程序上下文导致的: 是否可以单独运行此测试?我只想在启动test1时读取所有必需的东西,然后运行测试,然后关闭所有必需的东西。然后启动test2。 问题答案: 您可以在修改应用程序上下文的测试类上使用@DirtiesContext批注。 Java文档 Spri
嗨,我正试图让spring junit测试用例...我要求加载完整的应用程序上下文。但是,junit测试不会初始化完整的应用程序上下文。 因此,它应该扫描com.test包中的所有spring bean,并将它们加载到Junit TestCase的applicationcontext中。但从大豆的产量来看,它似乎没有做到这一点。