我刚刚开始进入单元测试,并且由于与数据库的交互,无法看到执行大量测试用例的简单方法.
是否存在用于单元测试的标准方法/过程,其中需要数据库访问(读取和写入)以断言测试?
我可以想出迄今最好是有使用使用不同的数据库连接来引导我的应用程序,然后使用启动方法在现场分贝复制到隔离用于测试分贝配置文件?
我接近了吗?或者有更好的方法吗?
我有两张桌子:
table1 (id, name, connte)
table2 (id, name, connte)
Run Code Online (Sandbox Code Playgroud)
他们通过连接table1.connte和table2.connte.每个都包含100条记录.
现在,如果我想从table1中删除id = 20的记录及其在table2中的相应子项,那么最好是执行以下操作:
DELETE d1,d2 FROM table1 d1 INNER JOIN table2 d2 ON d1.connte= d2.connte WHERE d1.id = 20
Run Code Online (Sandbox Code Playgroud)
或以下:
select connte from table1 where id = 20
--Store connte in a variable say aabc--
delete from table2 where connte = aabc -> execute this first
delete from table1 where id = 20 -> execute this second
Run Code Online (Sandbox Code Playgroud)
如果我想要删除的记录只有一个父项和一个子项(这里是table1.id = 20),那么对整个表进行内连接是不是很昂贵?
我正在从JAVA(所以JDBC)运行此查询,因此对于上述条件,运行多个查询或内部联接是否更昂贵(性能明智)?
注意:假设表没有参照完整性.所以,我没有使用级联删除.
我有以下(简化)Hibernate实体:
@Entity(name = "Foo")
public class Foo {
@Id
@GeneratedValue
public int id;
@OneToOne
public Bar bar;
}
Run Code Online (Sandbox Code Playgroud)
和,
@Entity(name = "Bar")
public class Bar {
@Id
@GeneratedValue
public int id;
@Column
public String field;
@Version
public int version;
}
Run Code Online (Sandbox Code Playgroud)
我在一个看起来大致如下的事务中更新这些实体:
Bar bar = findBar(em);
Foo foo = findFoo(em);
bar.field = "updated value";
if (<condition>) {
em.remove(foo);
}
em.detach(bar);
em.merge(bar);
Run Code Online (Sandbox Code Playgroud)
请注意,em.remove(foo)
有时仅调用,而bar始终更新.
我注意到ORA-00060: Deadlock detected
在运行应用程序时偶尔会出现错误.转储似乎表明,两个僵持会话锁定em.merge(bar)
和em.remove(foo)
,但我不明白为什么会是这样.
这段代码怎么会死锁?有没有办法重组它避免死锁?
以下是跟踪中的一些额外信息:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name …
Run Code Online (Sandbox Code Playgroud) 我需要一些建议...我有一个应用程序,用户可以在其中执行某些操作。例如,用户可以有朋友。所以...用户可以看到他的朋友的活动。那么我应该如何在数据库中实现活动日志呢?我应该有一张新桌子吗?我可以从多个表中执行一些查询并对连接结果进行排序吗?
我实际上想知道,在tcp握手中,为什么客户端需要回来完成握手.发布syn和syn-ack后,双方都有足够的信息来启动数据,仍然要求客户的ack转移到已建立的状态.
问题是,为什么这种三次握手是实现可靠性的必要和充分条件,即使很难我们在第二条消息本身后同步序列号.
任何见解?
考虑以下 Java 代码比较包含德语字素 \xc3\x9f的小字符串
\n\nString a = "\xc3\x9f";\nString b = a.toUpperCase();\n\nassertTrue(a.equalsIgnoreCase(b));\n
Run Code Online (Sandbox Code Playgroud)\n\n比较失败,因为 "\xc3\x9f".toUpperCase() 实际上等于 "SS",最终导致检查失败equalsIgnoreCase()
。JavadocstoUpperCase()
确实明确提到了这种情况,但是我不明白为什么这不转到 \xe1\xba\x9e,即\xc3\x9f 的大写变体?
更一般地说,我们应该如何进行不区分大小写的比较,可能跨不同的区域设置。我们应该只使用 或toUpper()
之一equalsIgnoreCase()
,而不是同时使用两者吗?
问题似乎在于 的实现equalsIgnoreCase()
包括以下检查:anotherString.value.length == value.length
,这似乎与Javadocs for不兼容toUpper()
,其中声明:
\n\n由于大小写映射并不总是 1:1 字符映射,因此生成的字符串可能与原始字符串的长度不同。
\n
我有一个类,我想通过Jersey RESTful API公开.它看起来类似于:
@XmlRootElement
public class Data {
public String firstName;
public String lastName;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是这些字段可能为null,在这种情况下,字段从JSON输出中省略.我希望所有领域都存在,无论它们的价值如何.例如,如果lastName为null,则JSON输出将为:
{
"firstName" : "Oleksi"
}
Run Code Online (Sandbox Code Playgroud)
而不是我想要的:
{
"firstName" : "Oleksi",
"lastName" : null
}
Run Code Online (Sandbox Code Playgroud)
我有一个JAXBContextResolver(ContextResolver的实现),如下所示:
@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
// internal state
private final JAXBContext context;
private final Set<Class> types;
private final Class[] cTypes = { Data.class };
public JAXBContextResolver()
throws Exception {
types = new HashSet(Arrays.asList(cTypes));
context = new JSONJAXBContext(JSONConfiguration.natural().humanReadableFormatting(true).build(), cTypes);
}
@Override
public JAXBContext getContext(Class<?> objectType) {
return (types.contains(objectType)) …
Run Code Online (Sandbox Code Playgroud) int gcd(n,m)
{
if (n%m ==0) return m;
n = n%m;
return gcd(m,n);
}
Run Code Online (Sandbox Code Playgroud)
我解决了这个,我得到了
T(n, m) = 1 + T(m, n%m) if n > m
= 1 + T(m, n) if n < m
= m if n%m == 0
Run Code Online (Sandbox Code Playgroud)
我很困惑如何进一步获得最终结果.请帮我解决这个问题.
我有一个numpy数组,其中每个元素看起来像这样:
['3' '1' '35' '0' '0' '8.05' '2']
['3' '1' '' '0' '0' '8.4583' '0']
['1' '1' '54' '0' '0' '51.8625' '2']
Run Code Online (Sandbox Code Playgroud)
我想替换所有空字符串,如上面第二行中的字符串,默认值为0.我怎么能用numpy做这个?
最终的目标是能够运行:S.astype(np.float)
但我怀疑空字符串在转换中引起了问题.
请问有谁能告诉我比较两个常数char星的最有效方法吗?
#include <iostream>
#include <string>
int main()
{
const char* value1 = "hello";
const char* value2 = "HELLO";
const char* possibility = NULL;
if(stricmp(value1, value2)==0)
{
std::cout <<"\nThey Match!!!!!" << std::endl;
}
else{std::cout << "\nThey dont match :("<< std::endl;}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用了以下标准功能,但我知道它不是最有效的方法吗?
除了stricmp
无法处理NULL,在我的情况下有可能发生.
那么还有其他有助于提升性能的替代方案吗?
提前致谢
java ×3
optimization ×2
performance ×2
algorithm ×1
c++ ×1
database ×1
hibernate ×1
jax-rs ×1
jaxb ×1
jdbc ×1
jersey ×1
jpa ×1
json ×1
linguistics ×1
localization ×1
logging ×1
mocking ×1
mysql ×1
numpy ×1
oracle ×1
python ×1
recursion ×1
sql-server ×1
tcp ×1
testing ×1
transactions ×1
unit-testing ×1