Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 老鼠怪_Java_Events_Junit - Fatal编程技术网

Java 老鼠怪

Java 老鼠怪,java,events,junit,Java,Events,Junit,我正在尝试创建一个带有特定修饰符的MouseEvent,用于单元测试。我正在使用J2SE,以下代码无法通过: public void testMouseEventProblem() { MouseEvent event = new MouseEvent(new JPanel(), 1, System.currentTimeMillis(), InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK, 1,1, 0, false);

我正在尝试创建一个带有特定修饰符的MouseEvent,用于单元测试。我正在使用J2SE,以下代码无法通过:

public void testMouseEventProblem() {
  MouseEvent event = new MouseEvent(new JPanel(), 1, System.currentTimeMillis(), 
    InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK, 1,1, 0, false);

  assertEquals(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK, event.getModifiers());
}
它抱怨说“预计640,但实际是10”


发生了什么事?

我认为您不应该在这里使用assertEquals

您正在检查两个特定位中的至少一个是否设置在可以是任何值的值中,因此您可能希望分离断言

让我澄清一下: 您将得到一个由一组设置的位(修饰符)组成的数字,但您只关心两个特定的位。使用assertEquals,本质上就是说需要两个特定的位集,而其他位集为零

您可以做的是断言getModifiers()&(MASK1 | MASK2)大于零,因为这两个位中至少有一位必须为on才能发生


话虽如此,这些数字看起来有些古怪,您确定使用了正确的掩码值吗?

我认为您不应该在这里使用assertEquals

您正在检查两个特定位中的至少一个是否设置在可以是任何值的值中,因此您可能希望分离断言

让我澄清一下: 您将得到一个由一组设置的位(修饰符)组成的数字,但您只关心两个特定的位。使用assertEquals,本质上就是说需要两个特定的位集,而其他位集为零

您可以做的是断言getModifiers()&(MASK1 | MASK2)大于零,因为这两个位中至少有一位必须为on才能发生


话虽如此,这些数字看起来有些古怪,你确定使用了正确的掩码值吗?

它会在内部转换为ALT\u掩码和CTRL\u掩码常量(8+2)

它发生在JDK6中的
java.awt.event.InputEvent:405

/**
 * Returns the modifier mask for this event.
 */
public int getModifiers() {
    return modifiers & (JDK_1_3_MODIFIERS | HIGH_MODIFIERS);
}
尝试
getModifiersEx():442

public int getModifiersEx() {
    return modifiers & ~JDK_1_3_MODIFIERS;
}
因为ALT_DOWN_MASK和friends是Java1.3之后引入的扩展修饰符

证明:

public class MouseEvt {
    public static void main(String[] args) {
        MouseEvent event = new MouseEvent(new JPanel(), 1, System
                .currentTimeMillis(), InputEvent.CTRL_DOWN_MASK
                | InputEvent.ALT_DOWN_MASK, 1, 1, 0, false);

        System.out.printf("%d - %d%n", InputEvent.CTRL_DOWN_MASK 
            | InputEvent.ALT_DOWN_MASK,
            event.getModifiersEx());
    }
}

返回
640-640

它在内部转换为ALT_掩码和CTRL_掩码常量(8+2)

它发生在JDK6中的
java.awt.event.InputEvent:405

/**
 * Returns the modifier mask for this event.
 */
public int getModifiers() {
    return modifiers & (JDK_1_3_MODIFIERS | HIGH_MODIFIERS);
}
尝试
getModifiersEx():442

public int getModifiersEx() {
    return modifiers & ~JDK_1_3_MODIFIERS;
}
因为ALT_DOWN_MASK和friends是Java1.3之后引入的扩展修饰符

证明:

public class MouseEvt {
    public static void main(String[] args) {
        MouseEvent event = new MouseEvent(new JPanel(), 1, System
                .currentTimeMillis(), InputEvent.CTRL_DOWN_MASK
                | InputEvent.ALT_DOWN_MASK, 1, 1, 0, false);

        System.out.printf("%d - %d%n", InputEvent.CTRL_DOWN_MASK 
            | InputEvent.ALT_DOWN_MASK,
            event.getModifiersEx());
    }
}

返回
640-640

要扩展Uri的答案,您可能想说

assert(InputEvent.CTRL_DOWN_MAsK & event.getModifiers() != 0);
assert(InputEvent.ALT_DOWN_MAsK & event.getModifiers() != 0);

这将检查两个修饰符是否都被按下,而不考虑字符串的其余部分,这似乎是其他内容。

要扩展Uri的答案,您可能需要说

assert(InputEvent.CTRL_DOWN_MAsK & event.getModifiers() != 0);
assert(InputEvent.ALT_DOWN_MAsK & event.getModifiers() != 0);

这将检查两个修饰符是否都被按下,而不考虑字符串的其余部分,这似乎是另一回事。

但是如果知道为什么getModifiers()返回不同的数量(我不是Java爱好者,只是好奇),那还是很好的。但是你是对的,OP应该能够测试特定的位。要检查设置的位,可以执行以下操作:assertEquals(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK,(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK)&event.getModifiers();但是知道为什么getModifiers()返回一个不同的数量还是很好的(我不是Java爱好者,只是好奇而已)。但是你是对的,OP应该能够测试特定的位。要检查位是否被设置为on,你可以这样做:assertEquals(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK,(InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK)&event.getModifiers();