小编Uri*_*Uri的帖子

是否可以以编程方式生成JUnit测试用例和套件?

我必须为一组复杂的业务规则编写一个非常大的测试套件,这些规则目前以几种表格形式捕获(例如,如果参数XYZ是这样的,那么值应该在V1和V2之间).每个规则都有一个名称和自己的语义.

我的最终目标是建立一个测试套件,组织成子测试套件,每个规则都有一个测试用例.

一种选择是将所有这些规则硬编码为测试.这是丑陋的,耗时的,不灵活的.

另一种方法是编写一个Python脚本,该脚本将读取规则文件并使用单元测试生成Java类.如果可以的话,我宁愿避免这种情况.另一种变化是使用Jython.

理想情况下,我希望有一个可以读取文件的测试套件,然后在其中定义子套件和测试.所有这些测试都可以从表文件采取了一定的值进行初始化,在我们的系统中运行的固定入口点,然后调用基于预期值的结果会验证功能.

是否有合理的方法只使用Java来解决这个问题?

更新:我可能在某种程度上简化了我们的规则.其中一些确实是表格式(excel风格),另一些则更模糊.一般的问题仍然存在,因为我可能不是第一个遇到这个问题的人.

java junit unit-testing junit4

17
推荐指数
2
解决办法
9923
查看次数

如何确保Java序列化中枚举的一致性?

当我序列化一个对象时,我可以在类级别使用serialVersionUID机制来确保这两种类型的兼容性.

但是,当我序列化枚举值字段时会发生什么?有没有办法确保序列化和反序列化之间没有操作枚举类型?

假设我有一个类似OperationResult {SUCCESS,FAIL}的枚举,以及一​​个被序列化的对象中名为"result"的字段.当对象被反序列化时,即使有人恶意颠倒了这两个结果,我如何确保结果仍然正确?(假设枚举在其他地方声明为静态枚举)

我出于好奇而想知道 - 我使用jar级别的身份验证来防止操纵.

java enums serialization

16
推荐指数
2
解决办法
6114
查看次数

哪个解析器生成器教我的学生?

我正在(与其他人一起)为没有CS背景的IT专业人员教授计算机科学的相对入门课程.自从我开发了自动机和语法的课程资料以来,我还负责编写有关编译器和编译器构造的知识.

多年前,当我在大学学习编译时,我们所有的例子都来自Lex和Yacc.这些仍然广泛使用吗?有没有更常用于Java的东西?学生精通C和Java,但从未使用过解析器生成器.

任何关于教什么的提示都将不胜感激

compiler-construction parsing

15
推荐指数
5
解决办法
2318
查看次数

为什么Hibernate/JDBC/MySQL会在一天左右后断开连接?

我有几个服务器进程,偶尔会响应来自客户端的消息并执行只读事务.

大约几天后,服务器正在运行,它们停止正常工作,当我检查时发现有大量关于连接被关闭的消息.

当我检查出来时,事实证明,默认情况下,hibernate在某种开发模式下工作,在几种小时后连接被丢弃,我开始使用c3po进行连接池.

但是,即使使用c3po,我在服务器启动后大约24小时左右就会遇到这个问题.

有没有人遇到过这个问题并知道如何解决它?我对配置hibernate的复杂性不够熟悉.

mysql hibernate

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

如何在Python中为静态方法选择语法?

我已经使用Python一段时间了,我发现将方法声明为静态的语法是特殊的.

将声明一个常规方法:

def mymethod(self, params)
   ...
   return
Run Code Online (Sandbox Code Playgroud)

声明了一个静态方法:

def mystaticethod(params)
   ...
   return
mystaticmethod = staticmethod(mystaticmethod)
Run Code Online (Sandbox Code Playgroud)

如果您不添加静态方法行,编译器会抱怨自我丢失.

这是一种非常简单的非常简单的方法,在其他语言中只需使用关键字和声明语法.谁能告诉我这种语法的演变?这仅仅是因为课程被添加到现有语言中吗?

由于我可以将staticmethod行移动到类的后期,因此它还表明解析器在簿记方面的工作量更大.

请注意,我知道稍后添加的装饰器语法,我很想知道从语言设计角度来看原始语法是如何产生的.我能想到的唯一想法是staticmethod应用程序调用一个将函数对象转换为静态方法的操作.

python syntax static language-history

14
推荐指数
2
解决办法
1014
查看次数

是否有可能为特定的JVM实例获取真正唯一的ID?

我需要一种方法来从JVM中运行的Java代码中唯一地永久地标识JVM的实例.

也就是说,如果我在同一台机器上同时运行两个JVM,则每个JVM都是可区分的.它也可以与在其他计算机上运行JVM以及在同一台计算机上的未来执行区分开来,即使重用了进程ID也是如此.

我想我可以通过识别开始时间,机器MAC和进程ID来实现这样的东西,并以某种方式组合它们.我想知道是否有一些标准的方法来实现这一目标.

更新:我看到每个人都推荐了整个会话的UUID.这似乎是一个好主意,虽然可能有点太重量级.这是我的问题:我想使用JVM id在每个JVM执行中创建多个唯一标识符,以某种方式合并JVM实例.

我的理解是你不应该将其他数字混合到一个UUID中,因为不再保证唯一性.另一种方法是将UUID转换为字符串并将其链接,但随后它变得太长.克服这个想法?

java jvm uniqueidentifier

13
推荐指数
1
解决办法
7103
查看次数

为什么Java有NullPointerException而不是NullReferenceException?

可能重复:
什么是空指针异常?
Java:为什么NullPointerExceptions不是NullReferenceExceptions?

我们空闲的好奇心,有谁知道为什么Java中的空引用异常被称为NullPointerException?

似乎违反直觉的是,在正式没有指针的新语言中,在使用空引用时将选择使用此名称.

如果有人能指出我的权威解释,那将不胜感激.

java naming

13
推荐指数
1
解决办法
5170
查看次数

命名子类的最佳实践

我经常遇到一个由接口或类表示的概念,然后我有一系列扩展它的子类/子接口.

例如:通用"DoiGraphNode"表示资源的"DoiGraphNode"表示Java资源的"DoiGraphNode"具有相关路径的"DoiGraphNode"等.

我可以想到三个命名约定,并希望评论如何选择.


选项1:始终以概念的名称开头.

因此:DoiGraphNode,DoiGraphNodeResource,DoiGraphNodeJavaResource,DoiGraphNodeWithPath等.

亲:很清楚我在处理什么,很容易看到我的所有选项

骗局:不是很自然?一切看起来都一样吗?


选项2:将特殊内容放在开头.

因此:DoiGraphNode,ResourceDoiGraphNode,JavaResourceDoiGraphNode,PathBaseDoiGraphNode等等.

亲:我在代码中看到的很清楚

Con:发现它可能很困难,特别是如果我不记得名字,缺乏视觉一致性


选项3:放入特殊内容并删除一些冗余文本

因此:DoiGraphNode,ResourceNode,JavaResourceNode,GraphNodeWithPath

Pro:没有那么多写和读Con:看起来像cr*p,非常不一致,可能与其他名称冲突

oop naming hierarchy

12
推荐指数
2
解决办法
5089
查看次数

用于创建内部类的新实例的Java语法的起源?

我很好奇在Java中给定外部类的实例来实例化内部类的语法选择.

语法是:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();
Run Code Online (Sandbox Code Playgroud)

但为什么不呢:

OuterClass.InnerClass innerObject = new outerObject.InnerClass(); 
Run Code Online (Sandbox Code Playgroud)

前者似乎暗示new是直接与类关联的方法或操作符,但我的理解是不是这种情况(与C++不同)?

java syntax inner-classes

12
推荐指数
1
解决办法
1906
查看次数

Tries对现代建筑仍然是一个好主意吗?

我最喜欢的大学数据结构之一就是Trie.如果共享前缀,它是一个很好的数据结构,用于保存大量字符串.查找也很好,因为它们是在字符串的O(| length |)处完成的,无论集合中有多少字符串.

相比之下,平衡树的设置项数量为O(log N),加上您为比较支付的费用.哈希表将涉及哈希计算,比较等.

因此,令我惊讶的是,在大多数语言的标准库中没有Trie实现.

我能想到的唯一原因是内存访问成本太高的可能性.如果进行树查找,则不是在调查O(log N)位置,而是在进行O(| length |)不同的位置,并产生所有后果.如果字符串很长,这可能会导致太多.

所以我想知道:我刚才描述的问题有多少?当您需要存储大型字符串或字符串映射时,您会怎么做?

trie data-structures

10
推荐指数
1
解决办法
1169
查看次数