对于评估,我需要创建一个哈希表,我已经完成了。但是,我需要在插入null键时抛出一个异常。
我要通过的测试是:
@Test(expected = IllegalArgumentException.class)
public void testNullKey() {
Hashtable<Boolean> h = new Hashtable<>(10);
h.put(null, true);
}
这给了我一个错误:
java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.NullPointerException>
Caused by: java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "key" is null
at Hashtable.hash(Hashtable.java:270)
at Hashtable.put(Hashtable.java:84)
at test.TestHT.testNullKey(TestHT.java:52)
hashtable.hash(hashtable。java:270)是:
private int hash(String key)
{
int hashVal = key.hashCode();
hashVal %= max;
if (hashVal < 0)
hashVal += max;
return hashVal;
}
和hashtable.put(hashtable。java:84)是:
public void put(String key, V value)
{
int h = 0;
if (getLoadFactor() > maxLoad)
resize();
h = probeType == PROBE_TYPE.LINEAR_PROBE ? hash(key) : doubleHash(key);
if (get(key) != null)
{
arr[h] = new Pair(key, value);
} else
{
arr[findEmpty(h, 0, key)] = new Pair(key, value);
itemCount++;
}
}
我完全不知道在插入空键时抛出异常。我试着添加 throw new IllegalArgumentException();
还有其他类似的尝试 put
,但我不能让它工作。
有人有什么想法或建议吗?
1条答案
按热度按时间cnwbcb6i1#
好 啊。所以这个
Hashtable
类是您的代码,而不是java.util.Hashtable
. (你骗了我一分钟……)解决办法很简单。显式测试
key
看看是不是null
并抛出所需的异常:我会让你去找出最好的地方把代码放在哪里。
另一种方法是
NullPointerException
预期的异常。。。但我对你的问题的理解是,这个测试用例正在检查一个需求是否得到满足。