(这篇文章解释了为什么我想要这样做:单元测试的好模式形成在Spring MVC中具有基于注释的验证的bean)
编写单元测试以仅测试字段或类的配置/注释是否是一种良好的做法?例如,如果你有:
@AnnotatedClass
public class MyClass {
@AnnotatedField1
@AnnotatedField2
private string myField;
}
Run Code Online (Sandbox Code Playgroud)
编写单元测试是否有任何意义,可以检查上面是否存在注释?
有没有人遇到过需要有一个只有在满足所有组子句时才应用的约束。换句话说,对于
@NotNull(groups= {Group1.class, Group2.class})
private Integer value;
Run Code Online (Sandbox Code Playgroud)
当任一组有效时应用非空约束。
如果我想在两个组都有效时应用约束怎么办?
拥有自定义组不是一种选择,因为在我的应用程序中有许多此类组的组合。
public class TestSample {
public static void main(String[] args) {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
double ran = Math.random();
}
}
Run Code Online (Sandbox Code Playgroud)
我不想Random r = new Random();上课.有没有其他方法来生成随机数.我很惊讶可以应用什么逻辑来生成两个数字之间的随机数.
我目前正在为一个企业网络应用程序进行原型设计,其中包括一个快速搜索屏幕.此屏幕使用JQuery和Datatables提供搜索结果的表格视图.基于与在文本字段中输入的字符串的匹配来执行搜索.每次按下一个键时,都会将一个新的AJAX请求发送回servlet,执行搜索(跨大型数据库),并通过JSON返回结果以在表上更新.
对数据库的搜索是一项代价高昂的操作.很多时候,当用户输入一个名字时,他们会快速连续输入一些字母.这将导致在后端触发多次搜索,有时不必要.
我想知道是否有一种巧妙缓冲这些请求的方法.例如,如果用户正在键入"Jonathan",请不要发送对J,Jo,Jona,Jonath等的请求,如果它们都是在彼此的时间限制内输入,并且仅在有时请发送请求打字时有足够的空隙,即输入结尾处的字母n时.
我知道这会花费一点点延迟,但这可能是值得妥协的.
你认为这有道理吗?是否存在此类操作的现有模式/库?它是否会导致我没有想到的可用性问题?
非常感谢您的意见!
我正在尝试编写代码以在不使用集合的情况下对数组进行混洗.
我的洗牌代码
金额
private double amounts[] = { 0, 0.01, 1000000, 25, 250000, 75, 50, 1000,
200, 100, 400000, 750, 5000, 750000, 500, 100000, 300, 75000, 800,
20, 300000, 10, 50, 750, 25, 5, 1 };
public void Shuffle(){
Random rgen = new Random();
for (int i=0; i > amounts.length; i++) {
int randomPosition = rgen.nextInt(amounts.length);
double temp = amounts[i];
amounts[i] = amounts[randomPosition];
amounts[randomPosition] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
启动它的代码
public void casesSetup() {
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud) 在下列情况下,我遇到问题,请查看下面的内联评论:
public void exampleMethod() {
//Intuitively I would expect this to mean that test is set containing objects
//that subclass AbstractGroup
Set<? extends AbstractGroup> test;
//Yet the compiler complains here and I do not understand why?
test.add(new AnyAbstractGroupSubGroup());
//I would guess that a method call such as this at runtime
test = new HashSet<SubGroupA>()
//would mean that only objects of subgroupA can be added to the collection, but then
//what is the point in using the wildcard in the first …Run Code Online (Sandbox Code Playgroud) 我正试图在一个有81个盒子的窗口中显示一个解决的数独拼图.我这样做了:
import java.awt.GridLayout;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class GraphicSolver extends JFrame {
GraphicSolver(int[][] spelplan) {
Panel panel = new Panel(new GridLayout(9,9));
for(int i=9;i<9;i++){
for(int x=0;x<9;x++){
panel.add(new JLabel(""+spelplan[i][x]));
}
}
Frame frame = new Frame();
frame.add(panel);
frame.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它只给了我一个没有任何数字的空窗口.如果有人能指出我正确的方向,我会很高兴.
这是scanario:
我正在研究一个DAO对象,它使用hibernate标准API来形成一些复杂的查询来执行数据库上的某些任务(例如,跨多个字段的关键字搜索).
我们需要对此进行单元测试,以确保生成的查询对于各种场景都是正确的.测试它的一种方法 - 可能更好 - 将通过最后检查并模拟数据库交互来测试hibernate标准是否正确创建.然而,这是不可取的,因为它首先是有点作弊(它只是复制了代码将要做的事情),而且它也不会检查标准本身是否会导致休眠到barf,或者当它进入数据库时它会导致问题.
然后,使用选项对测试数据库运行查询.但是,由于历史原因,没有静态测试数据库(例如,代码作为代码的一部分签入的代码),并且我的项目的职权范围不允许我开始创建一个,我们必须满足于对共享开发数据库,定期使用生产数据刷新.
当这些刷新发生时,测试背后的数据也会发生变化,这将使我们的单元测试变得脆弱.我们可以通过在测试中不使用确切的数字来克服它,但这并不是真正适合测试的方式.
那么问题是:人们在这样的情况下做些什么来使测试变得不那么脆弱?我想到的一个选项是运行一个执行相同查询的本机SQL(行为 - 它不必与hibernate生成的查询完全相同)来获取预期的数字,然后运行DAO版本以查看如果它匹配.这样,查询的行为总是可以在初始本机SQL中实现,并且您将始终拥有正确的数字.
关于如何管理这种情况的这个或其他想法的任何反馈将不胜感激.
一个.
更新:
关于hsqldb/h2/derby的建议,我对它们很熟悉,但该公司尚未准备好沿着这条路走下去,只在一个测试用例上零碎地做它将不合适.
关于我之前的建议,我想详细说明一下 - 考虑这种情况:
我想确保我的相对复杂的关键字搜索返回"John Smith"的2100个匹配项.
为了找到预期的数字,我会分析我的数据库,并使用SQL查询找出数字.将该查询作为测试的一部分有什么缺点,以便您始终知道您正在测试标准的行为?
基本上问题是:如果由于某种原因你没有静态数据集进行测试,你将如何以非脆弱的方式执行集成测试?
我需要验证包含多个值的消息的签名.我唯一的参数是签名,公钥和值本身.用于创建签名的算法是具有192位的椭圆曲线密码术.我已经尝试在网上找到代码示例,但我没有找到任何针对此案例的内容.
有没有人使用java验证这个算法?您能否提供代码或示例链接?
谢谢您的帮助!
即使在阅读RFC并查看c和javascript实现之后,我也很难理解inflate算法的工作原理.我使用文本"TestingTesting"压缩了一个文件,并以十六进制获得了以下结果:0B 49 2D 2E C9 CC 4B 0F 81 50 00
我尝试在16位和32位字节序交换后读取数据,但在读取前3位后我无法再进一步,因为接下来的5位没有意义.我做错了什么,如何解析?
我使用过的参考资料:RFC 1951 Javascript C.
使用EasyMock设置void方法的期望时,是否可以将Object数组指定为方法的参数之一?
例如,如果我们有这样的事情:
Errors mockErrors = createMock(Errors.class);
...
mockErrors.rejectValue(Object[]{"5", "2"});
mockErrors.replay();
classUnderTest.someMethod();
Run Code Online (Sandbox Code Playgroud)
在ClassUnderTest中,someMethod调用rejectValue(Object [] {"5","2"});
然而,尽管期望被设置为正在调用的内容,但是easy mock会抱怨意外的方法调用.
> Unexpected method call rejectValue(["5", "2"]):
> rejectValue(["5", "2"]): expected: 1, actual: 0
Run Code Online (Sandbox Code Playgroud)
我认为这是因为在引擎盖下它依赖于Object []上的equals方法,并且由于两者不同,它返回false并且不满足条件.
有办法解决吗?因为我没有使用expect()设置期望我可以使用any()...有没有办法在void方法上做同样的事情?
java ×9
algorithm ×3
unit-testing ×3
javascript ×2
random ×2
testng ×2
ajax ×1
annotations ×1
arrays ×1
collections ×1
datatables ×1
dbunit ×1
easymock ×1
generics ×1
hibernate ×1
httprequest ×1
inflate ×1
jce ×1
jframe ×1
jquery ×1
jsr330 ×1
junit ×1
mocking ×1
reflection ×1
security ×1
shuffle ×1
swing ×1
wildcard ×1