小编Mik*_*one的帖子

null参数的IllegalArgumentException或NullPointerException?

我有一个简单的属性的setter方法,null不适合这个特定的属性.我总是在这种情况下被撕裂:我应该扔一个IllegalArgumentException,还是一个NullPointerException?从javadocs看,两者似乎都合适.有某种理解标准吗?或者这只是你应该做的任何事情之一,而且两者都是正确的?

java null exception nullpointerexception illegalargumentexception

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

集成和单元测试有什么区别?

我知道所谓的单元测试和集成测试的教科书定义.我很好奇的是,什么时候编写单元测试...我会编写它们以涵盖尽可能多的类.

例如,如果我有一个Word类,我会为Word该类编写一些单元测试.然后,我开始写我的Sentence班,当它需要与互动Word类,我会经常写我的单元测试,从而测试它们都SentenceWord......至少在他们互动的地方.

有这些测试基本上已经成为集成测试,因为他们现在测试这些2班的整合,还是仅仅是一个单元测试,跨越2班?

在一般情况下,因为这种不确定的线,我很少会实际编写集成测试......或者是使用我的成品,看看是否所有的碎片正常工作实际集成测试,即使他们是手动的,很少重复超出范围每个功能?

我是否误解了集成测试,或者集成和单元测试之间是否真的差别很小?


编辑

感谢所有人的响应!我认为从各种各样的答案中可以清楚地看出,单元测试和集成测试之间的界限肯定是模糊不清的,也许尝试找出哪些是真正的焦点应该保留在代码上有点迂腐(谢谢@Rob Cooper ).此外,抱歉,但我不会接受任何答案,因为太多太好了,而且看起来非常主观.

integration-testing unit-testing

296
推荐指数
10
解决办法
5万
查看次数

是否可以在bash脚本中检测32位与64位?

我正在写一个bash脚本以自动方式处理一些安装...我有可能得到32或64位二进制的一个这样的程序...是否有可能从bash检测机器架构,所以我可以选择正确的二进制?

这将适用于Ubuntu机器.

bash

69
推荐指数
6
解决办法
4万
查看次数

在某些Java泛型演员表中类型安全警告的含义是什么?

Java警告的含义是什么?

类型安全:从对象到列表的强制转换实际上是针对已擦除类型列表进行检查

当我尝试将Object转换为具有通用信息的类型时,我收到此警告,例如在以下代码中:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Run Code Online (Sandbox Code Playgroud)

java generics warnings casting type-safety

68
推荐指数
1
解决办法
8460
查看次数

为什么Java自动装箱不会扩展到自动装箱类型方法的方法调用?

我想将原语转换为字符串,我试过:

myInt.toString();
Run Code Online (Sandbox Code Playgroud)

这失败并出现错误:

int cannot be dereferenced
Run Code Online (Sandbox Code Playgroud)

现在,我得到的原语不是引用类型(即不是Object),所以不能有方法.然而,Java 5引入了自动装箱和拆箱(一个C#......我在C#中从未喜欢过,但这不是重点).因此,使用自动装箱,我希望上面的内容将myInt转换为Integer,然后调用toString().

此外,我相信C#允许这样的电话,除非我记错了.这只是Java自动装箱/拆箱规范的一个不幸的缺点,还是有充分的理由呢?

java autoboxing

51
推荐指数
5
解决办法
5909
查看次数

LISP宏可以走多远?

我已经阅读了很多内容,LISP可以动态地重新定义语法,大概是宏.我好奇这到底有多远?你能重新定义语言结构,以至于它的边界成为另一种语言的编译器吗?例如,您是否可以将LISP的功能性质更改为更面向对象的语法和语义,或许可以说语法更接近像Ruby这样的东西?

特别是,是否可以使用宏来摆脱括号地狱?我已经学会了足够的(Emacs-)LISP来使用我自己的微功能定制Emacs,但我很好奇宏可以在定制语言方面走多远.

lisp macros

45
推荐指数
9
解决办法
6448
查看次数

为什么我不能在我的super()调用周围使用try块?

因此,在Java中,构造函数的第一行HAS是对super的调用...是隐式调用super(),还是显式调用另一个构造函数.我想知道的是,为什么我不能试一试?

我的具体情况是我有一个测试的模拟类.没有默认的构造函数,但我想让一个更容易阅读的测试.我还想将从构造函数抛出的异常包装到RuntimeException中.

所以,我想要做的就是这样做:

public class MyClassMock extends MyClass {
    public MyClassMock() {
        try {
            super(0);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    // Mocked methods
}
Run Code Online (Sandbox Code Playgroud)

但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
}
Run Code Online (Sandbox Code Playgroud)

这是最好的解决方法吗?为什么Java不允许我做前者?


我对"为什么"的最好猜测是Java不希望让我在一个可能不一致的状态下拥有一个构造对象......但是,在做一个模拟时,我并不关心它.看来我应该能够做到这一点......或者至少我知道上面的情况对我来说是安全的......或者好像它应该是反正的.

我正在覆盖我在测试类中使用的任何方法,因此我没有使用未初始化变量的风险.

java exception mocking try-catch

39
推荐指数
3
解决办法
8211
查看次数

Java时区搞砸了

我正在运行Tomcat应用程序,我需要显示一些时间值.不幸的是,时间过了一个小时.我调查了一下,发现我的默认TimeZone被设置为:

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]
Run Code Online (Sandbox Code Playgroud)

而不是太平洋时区.当我尝试打印默认时区的显示名称时会进一步显示,并显示 "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在启动时使用太平洋时区?我不是在寻找程序化解决方案,它应该是一个配置解决方案.

java linux timezone

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

在JavaScript中进行对象文字赋值后是否需要分号?

以下代码说明了分配的对象文字,但之后没有分号:

var literal = {
    say: function(msg) { alert(msg); }
}
literal.say("hello world!");
Run Code Online (Sandbox Code Playgroud)

这似乎是合法的,并且不会发出警告(至少在Firefox 3中).这是完全合法的,还是有严格的JavaScript版本,这是不允许的?

我特别想知道未来的兼容性问题...我想写"正确的"JavaScript,所以如果技术上我需要使用分号,我想使用它.

javascript

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

Java .properties文件相当于Ruby?

我需要在文件中存储一些简单的属性并从Ruby访问它们.

我非常喜欢.properties文件格式,它是Java中这类东西的标准(使用java.util.Properties类)......它简单易用,易于阅读.

那么,是否有一个Ruby类可以让我从这样的文件中加载一些键值对而不需要花费太多精力?

我不想使用XML,所以请不要建议REXML(我的目的不保证"尖括号税").

我考虑过滚动我自己的解决方案......它可能是大约5到10行的代码顶部,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的散列)......就像那样把它降到一线......


更新:它实际上是一个直接的Ruby应用程序,而不是rails,但我认为YAML会做得很好(它在我的脑海里,但我已经忘记了它......已经看过但从未使用过),谢谢大家!

ruby file-io

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