• <tfoot id='DflMM'></tfoot>
      <bdo id='DflMM'></bdo><ul id='DflMM'></ul>
    1. <small id='DflMM'></small><noframes id='DflMM'>

      <legend id='DflMM'><style id='DflMM'><dir id='DflMM'><q id='DflMM'></q></dir></style></legend>
      <i id='DflMM'><tr id='DflMM'><dt id='DflMM'><q id='DflMM'><span id='DflMM'><b id='DflMM'><form id='DflMM'><ins id='DflMM'></ins><ul id='DflMM'></ul><sub id='DflMM'></sub></form><legend id='DflMM'></legend><bdo id='DflMM'><pre id='DflMM'><center id='DflMM'></center></pre></bdo></b><th id='DflMM'></th></span></q></dt></tr></i><div id='DflMM'><tfoot id='DflMM'></tfoot><dl id='DflMM'><fieldset id='DflMM'></fieldset></dl></div>

      1. 如何将模拟注入具有@Transactional 的@Service

        时间:2023-09-26

              <bdo id='ba8ck'></bdo><ul id='ba8ck'></ul>
                <i id='ba8ck'><tr id='ba8ck'><dt id='ba8ck'><q id='ba8ck'><span id='ba8ck'><b id='ba8ck'><form id='ba8ck'><ins id='ba8ck'></ins><ul id='ba8ck'></ul><sub id='ba8ck'></sub></form><legend id='ba8ck'></legend><bdo id='ba8ck'><pre id='ba8ck'><center id='ba8ck'></center></pre></bdo></b><th id='ba8ck'></th></span></q></dt></tr></i><div id='ba8ck'><tfoot id='ba8ck'></tfoot><dl id='ba8ck'><fieldset id='ba8ck'></fieldset></dl></div>
                  <tbody id='ba8ck'></tbody>
              • <legend id='ba8ck'><style id='ba8ck'><dir id='ba8ck'><q id='ba8ck'></q></dir></style></legend>

                <small id='ba8ck'></small><noframes id='ba8ck'>

                <tfoot id='ba8ck'></tfoot>
                • 本文介绍了如何将模拟注入具有@Transactional 的@Service的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我的单元测试中有任何问题,我有类似的东西.如果 blargh 函数使用 Transactional 注释,则模拟注入会在 someService 上被覆盖.如果我删除 Transactional ,则模拟会留在那里.从代码中可以看出,当服务中的函数被注释为事务时,Spring 会延迟加载服务,但在没有注释时会急切地加载服务.这会覆盖我注入的模拟.

                  I have any issue in my unit test where I have something along the lines of this. The mock injection get overridden on the someService if the blargh function is annotated with Transactional. If I remove the Transactional the mock stays there. From watching the code it appears that Spring lazily loads the services when a function in the service is annotated with transactinal, but eagerly loads the services when it isn't. This overrides the mock I injected.

                  有没有更好的方法来做到这一点?

                  Is there a better way to do this?

                  @Component
                  public class SomeTests
                  {
                    @Autowired
                    private SomeService someService;
                  
                    @Test
                    @Transactional
                    public void test(){
                      FooBar fooBarMock = mock(FooBar.class);
                      ReflectionTestUtils.setField(someService, "fooBar", fooBarMock);
                    }
                  }
                  
                  @Service
                  public class someService
                  {
                    @Autowired FooBar foobar;
                  
                    @Transactional // <-- this causes the mocked item to be overridden
                    public void blargh()
                    {
                      fooBar.doStuff();
                    }
                  }
                  

                  推荐答案

                  或许您可以尝试通过以下方式实现您的测试:

                  Probably you could try to implement your test in the following way:

                  @Component
                  @RunWith(MockitoJUnitRunner.class)
                  public class SomeTests
                  {
                    @Mock private FooBar foobar;
                    @InjectMocks private final SomeService someService = new SomeService();
                  
                  
                    @Test
                    @Transactional
                    public void test(){
                      when(fooBar.doStuff()).then....;
                      someService.blargh() .....
                    }
                  }
                  

                  由于没有您的配置和相关代码,我现在无法尝试.但这是测试服务逻辑的常用方法之一.

                  I could not try it right now as don't have your config and related code. But this is one of the common way to test the service logic.

                  这篇关于如何将模拟注入具有@Transactional 的@Service的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何在 Android 项目的 Java 模块上使用 Mockito 2 模拟 下一篇:Mockito when() 不区分子类

                  相关文章

                  最新文章

                • <small id='GOUvT'></small><noframes id='GOUvT'>

                    • <bdo id='GOUvT'></bdo><ul id='GOUvT'></ul>
                    <legend id='GOUvT'><style id='GOUvT'><dir id='GOUvT'><q id='GOUvT'></q></dir></style></legend>

                      <i id='GOUvT'><tr id='GOUvT'><dt id='GOUvT'><q id='GOUvT'><span id='GOUvT'><b id='GOUvT'><form id='GOUvT'><ins id='GOUvT'></ins><ul id='GOUvT'></ul><sub id='GOUvT'></sub></form><legend id='GOUvT'></legend><bdo id='GOUvT'><pre id='GOUvT'><center id='GOUvT'></center></pre></bdo></b><th id='GOUvT'></th></span></q></dt></tr></i><div id='GOUvT'><tfoot id='GOUvT'></tfoot><dl id='GOUvT'><fieldset id='GOUvT'></fieldset></dl></div>
                      <tfoot id='GOUvT'></tfoot>