我有一个简单的属性的setter方法,null不适合这个特定的属性.我总是在这种情况下被撕裂:我应该扔一个IllegalArgumentException,还是一个NullPointerException?从javadocs看,两者似乎都合适.有某种理解标准吗?或者这只是你应该做的任何事情之一,而且两者都是正确的?
java null exception nullpointerexception illegalargumentexception
我知道所谓的单元测试和集成测试的教科书定义.我很好奇的是,什么时候编写单元测试...我会编写它们以涵盖尽可能多的类.
例如,如果我有一个Word类,我会为Word该类编写一些单元测试.然后,我开始写我的Sentence班,当它需要与互动Word类,我会经常写我的单元测试,从而测试它们都Sentence和Word......至少在他们互动的地方.
有这些测试基本上已经成为集成测试,因为他们现在测试这些2班的整合,还是仅仅是一个单元测试,跨越2班?
在一般情况下,因为这种不确定的线,我很少会实际编写集成测试......或者是使用我的成品,看看是否所有的碎片正常工作实际集成测试,即使他们是手动的,很少重复超出范围每个功能?
我是否误解了集成测试,或者集成和单元测试之间是否真的差别很小?
感谢所有人的响应!我认为从各种各样的答案中可以清楚地看出,单元测试和集成测试之间的界限肯定是模糊不清的,也许尝试找出哪些是真正的焦点应该保留在代码上有点迂腐(谢谢@Rob Cooper ).此外,抱歉,但我不会接受任何答案,因为太多太好了,而且看起来非常主观.
我正在写一个bash脚本以自动方式处理一些安装...我有可能得到32或64位二进制的一个这样的程序...是否有可能从bash检测机器架构,所以我可以选择正确的二进制?
这将适用于Ubuntu机器.
Java警告的含义是什么?
类型安全:从对象到列表的强制转换实际上是针对已擦除类型列表进行检查
当我尝试将Object转换为具有通用信息的类型时,我收到此警告,例如在以下代码中:
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
我想将原语转换为字符串,我试过:
myInt.toString();
这失败并出现错误:
int cannot be dereferenced
现在,我得到的原语不是引用类型(即不是Object),所以不能有方法.然而,Java 5引入了自动装箱和拆箱(一个C#......我在C#中从未喜欢过,但这不是重点).因此,使用自动装箱,我希望上面的内容将myInt转换为Integer,然后调用toString().
此外,我相信C#允许这样的电话,除非我记错了.这只是Java自动装箱/拆箱规范的一个不幸的缺点,还是有充分的理由呢?
我已经阅读了很多内容,LISP可以动态地重新定义语法,大概是宏.我好奇这到底有多远?你能重新定义语言结构,以至于它的边界成为另一种语言的编译器吗?例如,您是否可以将LISP的功能性质更改为更面向对象的语法和语义,或许可以说语法更接近像Ruby这样的东西?
特别是,是否可以使用宏来摆脱括号地狱?我已经学会了足够的(Emacs-)LISP来使用我自己的微功能定制Emacs,但我很好奇宏可以在定制语言方面走多远.
因此,在Java中,构造函数的第一行HAS是对super的调用...是隐式调用super(),还是显式调用另一个构造函数.我想知道的是,为什么我不能试一试?
我的具体情况是我有一个测试的模拟类.没有默认的构造函数,但我想让一个更容易阅读的测试.我还想将从构造函数抛出的异常包装到RuntimeException中.
所以,我想要做的就是这样做:
public class MyClassMock extends MyClass {
    public MyClassMock() {
        try {
            super(0);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    // Mocked methods
}
但Java抱怨说super不是第一个声明.
我的解决方法:
public class MyClassMock extends MyClass {
    public static MyClassMock construct() {
        try {
            return new MyClassMock();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public MyClassMock() throws Exception {
        super(0);
    }
    // Mocked methods
}
这是最好的解决方法吗?为什么Java不允许我做前者?
我对"为什么"的最好猜测是Java不希望让我在一个可能不一致的状态下拥有一个构造对象......但是,在做一个模拟时,我并不关心它.看来我应该能够做到这一点......或者至少我知道上面的情况对我来说是安全的......或者好像它应该是反正的.
我正在覆盖我在测试类中使用的任何方法,因此我没有使用未初始化变量的风险.
我正在运行Tomcat应用程序,我需要显示一些时间值.不幸的是,时间过了一个小时.我调查了一下,发现我的默认TimeZone被设置为:
sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]
而不是太平洋时区.当我尝试打印默认时区的显示名称时会进一步显示,并显示 "GMT-08:00",这似乎表明它未正确设置为美国太平洋时区.我在Ubuntu Hardy Heron上运行,从Gutsy Gibbon升级.
是否有可以更新的配置文件告诉JRE使用Pacific以及所有相关的夏令时信息?我的机器上的时间显示正确,因此它似乎不是操作系统范围内的错误配置.
好的,这是一个更新.一位同事建议我在我的/ etc/profile中更新JAVA_OPTS以包含"-Duser.timezone = US/Pacific",这有效(我也看到了CATALINA_OPTS,我也更新了).实际上,我只是将更改导出到变量而不是使用新的/ etc/profile(稍后重新启动将获取更改,我将是金色的).
但是,我仍然认为有一个更好的解决方案......应该有一个Java配置,它说明它正在使用什么时区,或者它是如何抓住时区的.如果有人知道这样的设置,那将是非常棒的,但是现在这是一个不错的解决方法.
我使用1.5,这绝对是一个DST问题.如您所见,时区设置为不使用夏令时.我的信念是它通常设置为-8偏移而不是特定的太平洋时区.由于泛型-8偏移没有夏令时信息,它当然不使用它,但问题是,我在哪里告诉Java在启动时使用太平洋时区?我不是在寻找程序化解决方案,它应该是一个配置解决方案.
以下代码说明了分配的对象文字,但之后没有分号:
var literal = {
    say: function(msg) { alert(msg); }
}
literal.say("hello world!");
这似乎是合法的,并且不会发出警告(至少在Firefox 3中).这是完全合法的,还是有严格的JavaScript版本,这是不允许的?
我特别想知道未来的兼容性问题...我想写"正确的"JavaScript,所以如果技术上我需要使用分号,我想使用它.
我需要在文件中存储一些简单的属性并从Ruby访问它们.
我非常喜欢.properties文件格式,它是Java中这类东西的标准(使用java.util.Properties类)......它简单易用,易于阅读.
那么,是否有一个Ruby类可以让我从这样的文件中加载一些键值对而不需要花费太多精力?
我不想使用XML,所以请不要建议REXML(我的目的不保证"尖括号税").
我考虑过滚动我自己的解决方案......它可能是大约5到10行的代码顶部,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的散列)......就像那样把它降到一线......
更新:它实际上是一个直接的Ruby应用程序,而不是rails,但我认为YAML会做得很好(它在我的脑海里,但我已经忘记了它......已经看过但从未使用过),谢谢大家!
java ×5
exception ×2
autoboxing ×1
bash ×1
casting ×1
file-io ×1
generics ×1
javascript ×1
linux ×1
lisp ×1
macros ×1
mocking ×1
null ×1
ruby ×1
timezone ×1
try-catch ×1
type-safety ×1
unit-testing ×1
warnings ×1