小编E-R*_*Riz的帖子

是否存在一个"每个"匹配器的Hamcrest,它将一个Collection或Iterable匹配的所有元素断言为一个特定的匹配器?

给定一个CollectionIterable一个项目,是否有任何Matcher(或匹配的组合)断言每个项目匹配一个Matcher

例如,给定此项目类型:

public interface Person {
    public String getGender();
}
Run Code Online (Sandbox Code Playgroud)

我想写一个断言,Persons 集合中的所有项都有特定的gender值.我在想这样的事情:

Iterable<Person> people = ...;
assertThat(people, each(hasProperty("gender", "Male")));
Run Code Online (Sandbox Code Playgroud)

没有each自己编写匹配器,有没有办法做到这一点?

java hamcrest

54
推荐指数
1
解决办法
2万
查看次数

如何判断Android中是否存在Intent附加功能?

我有这个代码,检查从我的应用程序中的许多地方调用的活动上的Intent中的额外值:

getIntent().getExtras().getBoolean("isNewItem")
Run Code Online (Sandbox Code Playgroud)

如果未设置isNewItem,我的代码会崩溃吗?在我打电话之前,有没有办法判断它是否已经设定?

处理这个问题的正确方法是什么?

java android android-intent

49
推荐指数
3
解决办法
5万
查看次数

Rails 5:不推荐使用参数"Gem.paths =`"中的数组值

基于actioncable-examples构建websockets app.启动服务器,运行rake等时,我不断收到消息:

Array values in the parameter to `Gem.paths=` are deprecated.
Run Code Online (Sandbox Code Playgroud)

这里没有看到解决方案,但确实找到了解决方案.我想在这里发布问题和答案,以便它可用.

ruby-on-rails ruby-on-rails-5

29
推荐指数
1
解决办法
7334
查看次数

为什么Java的调试热插拔仅限于方法内更改?

我已经通过热部署教程,它的工作原理.但我对这些限制有疑问(第3点)即

热部署仅支持方法实现中的代码更改.如果添加新类或新方法,仍需要重新启动.

基本上,如果我在现有方法中进行更改,但在添加方法或类的情况下需要,我们不需要重新启动服务器.

我理解它是如何工作的: -当我在现有方法中进行更改或引入新方法时,Eclipse会将文件放在webserver下的正确位置.如果类已经由perm gen空间中的类加载器加载,它将从permgen空间卸载它并在内部加载新的,而不重新启动服务器,以便反映新的更改(字节代码).那是对的吗 ?

如果是,为什么热部署不适用于新方法和新类文件?

java debugging hotdeploy jpda

22
推荐指数
1
解决办法
2860
查看次数

如何在Eclipse Luna中安装Hibernate工具?

我正在使用Eclipse Luna,我想创建一个Web应用程序并使用Hibernate来获取我的数据.在Eclipse Marketplace中,我找到了用于Indigo或Helios的Hibernate工具,但没有找到Luna.

我找到了Luna的Red Hat JBoss Developper Studio(那是什么?).

eclipse hibernate hibernate-tools

15
推荐指数
2
解决办法
2万
查看次数

如何正确使用Jackson @JSONView从默认序列化中排除特定属性?

给定一个像这样的JSON映射类:

public class Person {
    @JsonProperty
    String getName() { ... }

    @JsonProperty @JsonView(SpecialView.class)
    String getId() { ... }
}
Run Code Online (Sandbox Code Playgroud)

name当使用"正常"序列化(即,没有指定视图)时,我只需要包含属性,并在使用时序列化时包含这两个属性SpecialView.但是,当我这样做

objectMapper.writeValueAsString(object)
Run Code Online (Sandbox Code Playgroud)

(即,未指定任何视图),id包含该属性.

如果我做

objectMapper..writerWithView(Object.class).writeValueAsString(object)
Run Code Online (Sandbox Code Playgroud)

然后它表现得像预期的那样.问题是,我没有控制所有正在进行序列化的代码,所以我不能强制它来指定一个视图.

当我逐步完成杰克逊源代码(v 2.5.4)时,我发现如果没有"活动视图" com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields()则不会使用它_filteredProps:

    if (_filteredProps != null && provider.getActiveView() != null) {
        props = _filteredProps;
    } else {
        props = _props;
    }
Run Code Online (Sandbox Code Playgroud)

@JsonView当没有指定视图时,序列化不会尊重,这似乎很奇怪.我错过了什么吗?

有没有办法实现我想要的?

jackson

10
推荐指数
1
解决办法
3537
查看次数

在IntelliJ中是否有像Eclipse的Java Browsing透视图这样的包/类浏览器?

作为一个长期的Eclipse高级用户,我完全沉迷于它在Java Browsing透视图中呈现的Smalltalk风格的包和类浏览器.IntelliJ有什么类似的东西吗?

在此输入图像描述

注意:我不是在寻找IntelliJ的项目窗口; 这更像是Eclipse的Package Explorer或Project Explorer.

eclipse intellij-idea

9
推荐指数
1
解决办法
1085
查看次数

如何将@InjectMocks和initMocks()与具有必需String参数的对象一起使用?

给定一个要测试的组件,需要String在其构造函数注入中使用不可模拟的class(),如下所示:

public class MyService {
    @Inject
    public MyService(String param1, SomeObject param2) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用Mockito用这样的测试工具测试它:

public class MyServiceTests {
    @Mock
    private SomeObject someObject;

    @InjectMocks
    private MyService service;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,我不能@Spy@MockStrings(因为String是最后一堂课).那么我怎样才能使用Mockito并为构造函数的param1参数"注入"一个特定的String值MyService(或者测试这个需要传递非null String的类)?

mocking mockito

9
推荐指数
1
解决办法
1万
查看次数

AsyncLocal&lt;&gt; 值需要线程安全吗?

最近的 PR 评论中出现了一个关于是否AsyncLocal<IDictionary<>>应该使用ConcurrentDictionary<>. 我的想法是不需要这样做,因为 AsyncLocal 值不会同时被多个线程访问。但我想确定一下。

我们是否需要担心 AsyncLocal 中保存的对象的线程安全性?请解释为什么或为什么不。证明所断言答案的单元测试的奖励积分。

c# .net-core

9
推荐指数
1
解决办法
1977
查看次数

如何创建未在故障跟踪中显示的自定义JUnit4断言

我想在我们的代码库中添加一些自定义断言,以正确隐藏故障跟踪.我知道如何编写一个可以静态导入的公共静态方法.我知道如何重用旧的断言或抛出新的断言AssertionError.

我无法弄清楚如何做的是将新的自定义断言保留在Failure Trace之外.我们已经习惯了故障跟踪中的第一个命中,而不是断言代码本身,而是调用断言的测试代码.

我知道有一个filtertrace控制过滤堆栈的属性,但我找不到任何关于将新断言添加到过滤器所需要做的好文档.

我想做的一个例子:

package testassertions;

import static newassertions.MyAssertions.myAssertTrue;

import org.junit.Test;

public class ExampleTest {
    @Test
    public void myAssertTruePassing() { myAssertTrue(true); }

    @Test
    public void myAssertTrueFailing() { myAssertTrue(false); }
}
Run Code Online (Sandbox Code Playgroud)
package newassertions;

import static org.junit.Assert.assertTrue;

public class MyAssertions {

    public static void myAssertTrue(boolean b) {
        assertTrue(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

myAssertTrueFailing()的失败跟踪显示:

java.lang.AssertionError
    at newassertions.MyAssertions.myAssertTrue(MyAssertions.java:8)
    at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud)

我需要它只显示:

java.lang.AssertionError
    at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud)

java junit4 assertion java-5

8
推荐指数
1
解决办法
2525
查看次数