如何编写返回类a或类b的类型安全的Java方法?例如:
public ... either(boolean b) {
if (b) {
return new Integer(1);
} else {
return new String("hi");
}
}
什么是最干净的方法?
(我想到的唯一的事情就是使用显然很糟糕的异常,因为它滥用了通用语言功能的错误处理机制…
public String either(boolean b) throws IntException {
if (b) {
return new String("test");
} else {
throw new IntException(new Integer(1));
}
}
)
我模拟代数数据类型的一般公式是:
instanceof
先检查构造函数,然后向下转换为适当的类型以获取数据。所以对于Either a b
,它将是这样的:
abstract class Either<A, B> { }
class Left<A, B> extends Either<A, B> {
public A left_value;
public Left(A a) { left_value = a; }
}
class Right<A, B> extends Either<A, B> {
public B right_value;
public Right(B b) { right_value = b; }
}
// to construct it
Either<A, B> foo = new Left<A, B>(some_A_value);
Either<A, B> bar = new Right<A, B>(some_B_value);
// to deconstruct it
if (foo instanceof Left) {
Left<A, B> foo_left = (Left<A, B>)foo;
// do stuff with foo_left.a
} else if (foo instanceof Right) {
Right<A, B> foo_right = (Right<A, B>)foo;
// do stuff with foo_right.b
}
我试图使用下面的代码模拟方法,但我得到了异常,而且我是单元测试的新手
我知道Dan North设计BDD的意图之一是将词汇表从复杂的测试域中移开。然而,在实现由外到内的方法时,我们似乎仍然需要对模仿行为(或者,如果您愿意的话)有一些了解。North在这个视频中建议,如果我从最外层的域对象开始,然后向内工作,我会在发现合作者时模仿它们,然后用适当的实现替换它们。所以最后,我以一组端到端测试结束。 Martin Fowler在这篇博客文章中定义了TDD的两个阵营:“古典
问题内容: 在我的代码中,我有这样的东西: 如何在junit测试中“模拟”它以返回特定日期? 问题答案: 就我所知,您有三个明智的选择: 将实例插入您当天设置的任何方法/类中。 使用JodaTime而不是。这不是一个选择,而是一个建议,因为JodaTime将使您的生活更加轻松。您仍然需要将此时间注入该方法中。 包装在一些界面中,可以让您获取时间。然后,您只需模拟该接口并使其返回常量即可。
问题内容: 在某些情况下,使用类型转换返回null值而不是抛出ClassCastException是可行的。C#让操作员执行此操作。Java中是否有等效的东西可用,因此您不必显式检查ClassCastException? 问题答案: 这是@Omar Kooheji建议的as的实现:
问题内容: 我有一个类,我正在为应该执行以下操作的方法编写测试: 1)它应该调用静态方法上 2)它应该从子类方法填充变量 3)它应该从传递String参数的最终帮助器类中调用静态方法 4)它应该在blockList中调用每个的run方法 到目前为止,我有这个空方法: 我正在使用JUnit,Mockito来模拟对象,并且尝试使用PowerMockito来模拟静态类和最终类(Mockito不能这样做)
问题内容: 我想运行一个Java程序,并使其模拟键盘按键。因此,例如,可以在聚焦的输入框中键入一些文本。这可能吗? 问题答案: 可能会有所帮助。 这是的一个简单示例代码片段: