- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我最近以自由职业者的身份开始了我当前的项目。我投入其中的一件事是失败的 Jenkins 构建(它从 4 月 8 日开始失败,也就是我开始这里的前一周)。
一般来说,您可以在日志中看到一大堆 DI 问题。我做的第一件事是让所有测试以相同的方式工作,从相同的应用程序上下文开始。他们还实现了自己的“模拟”东西,但似乎无法正常工作。在与主要开发人员讨论后,我建议开始使用 Springockito。 (对于某个模块,他们需要模拟他们的集成测试 - 遗留原因,无法更改)
无论如何,在那之后事情开始严重失败。许多在测试中被模拟的 bean,根本就没有被模拟,或者没有被发现等等。通常,它会在加载应用程序上下文时失败,表明缺少一个或另一个 bean。
我尝试了不同的东西和不同的方法,但最后,只有我最担心的方法会起作用:将@DirtiesContext 添加到每个测试中。现在,maven 构建又开始变绿了,测试开始做他们应该做的事情。但是我每次都重新加载 Spring 上下文,这需要时间 - 这是相对的,因为上下文在大约 1 - 2 秒内加载。
这个故事的旁注是他们已经升级到 Hibernate 4,从而升级到 Spring 3.2。以前,他们使用的是旧版本的 Spring 3。当时所有测试都正常,@DirtiesContext 不是必需的。
现在,最让我担心的是,我无法立即想到对这种奇怪行为的解释。似乎 Springs 上下文很脏,只需启动一个使用 @Autowired bean 的测试即可。并非所有测试都使用 Mocks,所以不可能。这听起来很熟悉吗?有没有人对使用(最新版本的)Spring 进行集成测试有相同的经验?
在 Stackoverflow 上,我找到了这张票:How can a test 'dirty' a spring application context?它似乎几乎总结了我所看到的行为,但关键是我们正在 Autowiring 服务/存储库/......,并且我们在这些类上没有任何 setter 。
有什么想法吗?
谢谢!
最佳答案
要回答我自己的问题, secret 就在 Spring 版本中。我们使用的是 Spring 3.1.3,而我认为他们使用的是 Spring 3.2(他们一直在谈论 Spring 版本的最新升级)。
解释在这里,我在寻找修复它的过程中偶然发现了一篇博客文章:Spring Framework 3.2 RC1: New Testing Features
以及相关作品的复制粘贴:
The use of generic factory methods in Spring configuration is by no means specific to testing, but generic factory methods such as EasyMock.createMock(MyService.class) or Mockito.mock(MyService.class) are often used to create dynamic mocks for Spring beans in a test application context. For example, prior to Spring Framework 3.2 the following configuration could fail to autowire the OrderRepository into the OrderService. The reason is that, depending on the order in which beans are initialized in the application context, Spring would potentially infer the type of the orderRepository bean to be java.lang.Object instead of com.example.repository.OrderRepository.
那么,我是如何解决这个问题的呢?好吧,我做了以下步骤:
我能给出的唯一合理解释是上下文实际上被弄脏了,因为有一个框架 (Springockito) 从 Spring 框架接管了 Spring bean 的管理。我不知道这是否正确,但这是我能想到的最好的解释。事实上,这就是脏上下文的定义,这就是我们需要将其标记为脏的原因。
使用这个策略,我再次构建并运行,所有测试都运行正常。它并不完美,但很有效,而且始终如一。
关于java - 每次集成测试后 Spring 上下文变脏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16833063/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!