有一些类似的主题,但我找不到一个有足够答案的主题.
我想知道在Java中构造函数重载的最佳实践是什么.我已经对这个问题有了自己的想法,但我想听听更多建议.
我指的是简单类中的构造函数重载和构造函数重载,同时继承已经重载的类(意味着基类具有重载的构造函数).
谢谢 :)
我正在用Java编程,我的应用程序正在大量使用DB.因此,能够轻松测试我的数据库使用对我来说非常重要.
DB测试的全部内容是什么?对我来说,他们应该提供两个简单的要求:
那么,似乎我所需要的只是一个数据库.
但实际上,我不喜欢,因为使用数据库进行测试的困难很少:
所以,你可以弄清楚我在测试时不喜欢数据库(当然,我必须在某些方面达到这个目的,但是在我发现大多数错误使用之后,我宁愿在我的测试后到达那里.其余的测试方法).但我在寻找什么?
我正在寻找一种使用文件系统或虚拟内存来模拟数据库,模拟数据库的方法.我想也许有一个Java工具/包允许简单构建(使用代码接口)每个测试的数据库模拟,模拟表和行,SQL验证,以及用于监视其状态的代码接口(而不是使用SQL) ).
你熟悉这种工具吗?
编辑:谢谢你的回答!虽然我要求一个工具,你也提供了一些关于这个问题的提示:)我需要一些时间来查看你的报价,所以我现在不能说你的答案是否令人满意.
无论如何,这里是我正在寻找的更好的视图 - 想象一个名为DBMonitor的类,它的一个功能是查找表中的行数.这是一个虚构的代码,说明我如何使用JUnit测试该功能:
public class TestDBMonitor extends TestCase {
@Override
public void setUp() throws Exception {
MockConnection connection = new MockConnection();
this.tableName = "table1";
MockTable table = new MockTable(tableName);
String columnName = "column1";
ColumnType columnType = ColumnType.NUMBER;
int columnSize = 50;
MockColumn column = new MockColumn(columnName, columnType, columnSize);
table.addColumn(column);
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 使用ScalaMock,我想模拟/存根一个类方法,因此它将为每次调用返回一个不同的值(调用顺序很重要).
我可以用mock和实现这一点expects,但这将迫使我验证这些调用.
我可以这样做stub吗?
另外,我怎么能说"第一次返回X,然后总是返回Y"(两者都带有mock和stub)?
是否有可能在 IntelliJ 中找到 Scala 类的构造函数的用法?
在此类构造函数上使用“查找用法”时,它也适用于类签名的每个用法(因为签名在类及其构造函数之间共享)。
我想将一个简单的键值字符串映射存储为PostgreSQL表中的一个字段。我打算将地图作为一个整体来对待;即,始终选择整个地图,并且永远不要通过其键或值进行查询。
我读过比较hstore,json和之间的文章jsonb,但是这些文章并没有帮助我选择最适合我的需求的数据类型:
null。哪种数据类型最适合我的用例?
我有两个非常相似的方法.唯一的区别是使用ClassTag和TypeTag:
def matchClass[A: ClassTag](v: Any) =
v match {
case a: A => "it's A"
case _ => "not A"
}
def matchType[A: TypeTag](v: Any) = ... // same code as matchClass
Run Code Online (Sandbox Code Playgroud)
将显示编译警告matchType,但不会显示matchClass:
abstract type pattern A is unchecked since it is eliminated by erasure case a: A
为什么会有警告?为什么它只显示TypeTag和不显示ClassTag?
我刚刚设置了一个新的PostgreSQL 9.5.2,似乎我的所有事务都是自动提交的.
运行以下SQL:
CREATE TABLE test (id NUMERIC PRIMARY KEY);
INSERT INTO test (id) VALUES (1);
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)
导致警告:
WARNING: there is no transaction in progress
ROLLBACK
Run Code Online (Sandbox Code Playgroud)
在不同的事务上,以下查询:
SELECT * FROM test;
Run Code Online (Sandbox Code Playgroud)
实际上返回行1(就像提交了插件一样).
我试图autocommit出发,但似乎这个功能不再存在(我得到了unrecognized configuration parameter错误).
这到底是怎么回事?
我使用JPA(特别是Hibernate)映射了两个实体.这些实体有一对多的关系(我简化了演示):
@Entity
public class A {
@ManyToOne
public B getB() { return b; }
}
@Entity
public Class B {
@OneToMany(mappedBy="b")
public Set<A> getAs() { return as; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我试图通过使用关系的单侧/非所有者侧的setter(即被引用的表)来创建这些实体的两个实例之间的关系:
em.getTransaction().begin();
A a = new A();
B b = new B();
Set<A> as = new HashSet<A>();
as.add(a);
b.setAs(as);
em.persist(a);
em.persist(b);
em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
但是,关系不会持久保存到DB(为实体A创建的行不引用为实体B创建的行).为什么会这样?我希望它能起作用.
此外,如果我从@OneToMany注释中删除"mappedBy"属性,它将起作用.再次 - 为什么会这样?以及删除"mappedBy"属性可能产生的影响是什么?
我想使用JMockit模拟以下类:
public class A {
private int n;
public A(int n) {
this.n = n;
}
public boolean isCorrect() {
return n % 2 == 0;
}
}
Run Code Online (Sandbox Code Playgroud)
该类在我的代码中初始化,我通常无法访问测试中的那部分代码.
在我的一些测试中,我想模拟它,以便如果类的值初始化为3,'isCorrect'将返回true(这不是正常的行为),并且在其他一些测试中我想要模拟它以便无论如何初始化,'isCorrect'都将返回false.
我试图在文档中找到一种方法,但它不是那么用户友好,我放弃了它.
我遇到了一个关于将可变集合转换为不可变集合的奇怪行为,这可能会显着影响性能.
我们来看看下面的代码:
val map: Map[String, Set[Int]] = createMap()
while (true) {
map.get("existing-key")
}
Run Code Online (Sandbox Code Playgroud)
它只创建一次映射,然后重复访问其中一个enries,其中包含一个值作为值.它可以通过以下几种方式创建地图:
使用不可变集合:
def createMap() = keys.map(key => key -> (1 to amount).toSet).toMap
Run Code Online (Sandbox Code Playgroud)
或者使用可变集合(请注意最后的两个转换选项):
def createMap() = {
val map = mutable.Map[String, mutable.Set[Int]]()
for (key <- keys) {
val set = map.getOrElseUpdate(key, mutable.Set())
for (i <- 1 to amount) {
set.add(i)
}
}
map.toMap.mapValues(_.toSet) // option #1
map.mapValues(_.toSet).toMap // option #2
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,可变#1代码创建了一个映射,toSet无论何时get调用(如果条目存在),它都会调用其值,这可能会导致显着的性能损失(取决于用例).
为什么会这样?如何避免这种情况?
scala ×4
java ×3
mocking ×2
postgresql ×2
testing ×2
autocommit ×1
collections ×1
constructor ×1
database ×1
hibernate ×1
hstore ×1
jdbc ×1
jmockit ×1
jpa ×1
json ×1
jsonb ×1
overloading ×1
performance ×1
reflection ×1
scalamock ×1
sql ×1
sqldatatypes ×1
transactions ×1
unit-testing ×1
usability ×1