我被分配了一个单元测试任务的任务,我从未直接用JUnit工作,并且严格禁止更改包中的代码.这通常没有问题,因为我们的大多数单元测试只是为了功能和输入/输出的一致性,这可以通过运行例程并检查它们的返回值来完成.
但是,偶尔需要检查类中的私有变量,或者直接编辑私有变量以检查某些内部行为.有没有办法获得访问这些,无论是通过JUnit或任何其他方式,为了单元测试而不实际更改原始源包中的任何代码?如果没有,那么程序员如何在现实世界中处理这个问题,而单元测试人员可能与编码器不同?
将可变对象用作Hashmap键是不好的做法吗?当您尝试使用已修改足以更改其哈希码的密钥从Hashmap检索值时会发生什么?
例如,给定
class Key
{
int a; //mutable field
int b; //mutable field
public int hashcode()
return foo(a, b);
// setters setA and setB omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
用代码
HashMap<Key, Value> map = new HashMap<Key, Value>();
Key key1 = new Key(0, 0);
map.put(key1, value1); // value1 is an instance of Value
key1.setA(5);
key1.setB(10);
Run Code Online (Sandbox Code Playgroud)
如果我们现在打电话map.get(key1)怎么办?这是安全的还是可取的?或者行为是否依赖于语言?
Java文档似乎没有提及任何关于弃用的内容StringTokenizer,但我一直听说它很久以前就被弃用了.它被弃用是因为它有错误/错误,还是String.split()更好地使用整体?
我有一些使用的代码,StringTokenizer我想知道我是否应该认真考虑重构它以使用String.split(),或者弃用是否纯粹是方便的问题,我的代码是安全的.
关于Singletons的维基百科文章提到了一些在Java中实现结构的线程安全方法.对于我的问题,让我们考虑具有冗长初始化过程并且同时被许多线程所占据的单身人士.
首先,这个未提及的方法是否是线程安全的,如果是这样,它会同步什么?
public class Singleton {
private Singleton instance;
private Singleton() {
//lots of initialization code
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
其次,为什么以下实现线程在初始化时是安全且懒惰的?如果两个线程同时进入该getInstance()方法会发生什么?
public class Singleton {
private Singleton() {
//lots of initialization code
}
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在第二个示例中,如果一个线程首先获取实例而另一个线程获取实例并尝试在构造函数在第一个线程中完成之前对其执行操作,该怎么办?那你可以进入一个不安全的状态吗?
简单问题:Java内存/同步模型是否保证原子指针写入?也就是说,如果我们有竞争线程:
String shared;
thread1()
{
shared = "a";
}
thread2()
{
shared = "hello world";
}
Run Code Online (Sandbox Code Playgroud)
同时开工,shared始终保证是null,"a"或"hello world"?
在JUnit中,您可以使用@Ignorebefore方法告诉测试运行器自动跳过这些测试.从我可以收集的内容来看,这实际上只是一种方便的方式来记录/标记您想要稍后返回的不完整/不再有功能的测试.
我是否正确地说,在运行时,@Ignore测试,没有注释的方法和注释掉的方法之间没有区别?(假设这些测试都是自包含的.)有没有办法在Netbeans上的JUnit中获取被忽略的测试用例列表?如果没有,@Ignore标签真正有多大用处,因为失败测试可能更有用,所以它不会被忽视?
我有一组保证不同的对象(特别是由唯一的整数ID索引).我也确切地知道它们中有多少(并且数字不会改变),并且想知道Array是否比HashSet具有显着的性能优势来存储/检索所述元素.
在纸面上,Array保证了恒定的时间插入(因为我提前知道了大小)和检索,但是HashSet的代码看起来更清晰并且增加了一些灵活性,所以我想知道我是否在使用它时失去任何性能至少在理论上.
什么是有效的方法来排序主要有一小部分重复元素的数组?也就是说,列表如下:
{10,10,55,10,999,8851243,10,55,55,55,10,999,8851243,10}
假设equal元素的顺序无关紧要,那么什么是最坏情况/平均情况算法?
鉴于以下multiton:
public class Multiton
{
private static final Multiton[] instances = new Multiton[...];
private Multiton(...)
{
//...
}
public static Multiton getInstance(int which)
{
if(instances[which] == null)
{
instances[which] = new Multiton(...);
}
return instances[which];
}
}
Run Code Online (Sandbox Code Playgroud)
如果没有getInstance()方法的昂贵同步和双重检查锁定的争议,我们如何保持线程安全和懒惰?这里提到了单身人士的有效方法,但似乎并没有扩展到多人.
我们可以在C++中使用remove_if来基于对元素进行操作的谓词在线性时间中从向量中移除元素.
bool condition(double d) {...}
vector<double> data = ...
std::remove_if (data.begin(), data.end(), condition);
Run Code Online (Sandbox Code Playgroud)
如果我的条件不依赖于价值,而是依赖指数怎么办?换句话说,如果我想删除所有奇数索引元素,或某些任意索引集等?
bool condition(int index) {//returns whether this index should be removed}
vector<double> data = ...
std::remove_if (data.begin(), data.end(), ???);
Run Code Online (Sandbox Code Playgroud) java ×7
junit ×2
performance ×2
singleton ×2
unit-testing ×2
algorithm ×1
arrays ×1
atomic ×1
c++ ×1
deprecated ×1
duplicates ×1
hash ×1
hashcode ×1
hashmap ×1
hashset ×1
ignore ×1
indexing ×1
iterator ×1
key ×1
multiton ×1
mutable ×1
netbeans ×1
private ×1
remove-if ×1
sorting ×1
split ×1
string ×1
variables ×1
vector ×1