我想创建一个SQL Select来在MS SQL Server 2005中进行单元测试.基本思路是这样的:
从吧中选择'测试名',foo ='结果',其中baz =(某些标准)
这个想法是,如果"foo"列的值是"Result",那么我将得到一个值true/1; 如果不是,我会得到假/ 0.
不幸的是,T-SQL不喜欢这个表达式; 它在等号上窒息.
是否有某种方法可以在SQL选择列表中评估表达式并获得可返回的结果?(或者实现我想要的单元测试的其他方式?)
编辑:3个伟大的答案,全部围绕CASE.我会接受feihtthief,因为他的代表最少,因此最需要它.:-) 谢谢大家.
我是Java的新手,并且正在关注Eclipse Total Beginner的教程.它们都非常有用,但是在第12课中,他使用assertTrue了一个测试用例和assertFalse另一个测试用例.这是代码:
// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1)); // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());
assertFalse("Book was already checked out", ml.checkOut(b1,p2)); // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));
Run Code Online (Sandbox Code Playgroud)
我搜索了这些方法的好文档,但没有找到任何东西.如果我的理解是正确的,assertTrue那么assertFalse当第二个参数求值为false时显示字符串.如果是这样的话,拥有它们的重点是什么?
编辑:我想我看到令我困惑的是什么.作者可能只是为了展示他们的功能而放置它们(毕竟它是一个教程).然后他设置了一个会失败的信息,这样就会打印出来并告诉我为什么失败了.开始变得更有意义......我认为这是解释,但我不确定.
我最近读了两篇非常有趣的建议:
assert过NSAssert......没有任何理由不使用assert?(这不是字母:))我想处理AssertionError两者以隐藏用户的堆栈跟踪的不必要部分,并打印一条消息,说明错误发生的原因以及用户应该做些什么.
有没有办法找出块assert内失败的行或声明except?
try:
assert True
assert 7 == 7
assert 1 == 2
# many more statements like this
except AssertionError:
print 'Houston, we have a problem.'
print
print 'An error occurred on line ???? in statement ???'
exit(1)
Run Code Online (Sandbox Code Playgroud)
我不想将其添加到每个断言语句中:
assert 7 == 7, "7 == 7"
Run Code Online (Sandbox Code Playgroud)
因为它重复信息.
将Assert用于函数参数以强制执行其有效性是一种好习惯.我正在浏览Spring Framework的源代码,我注意到它们使用Assert.notNull了很多.这是一个例子
public static ParsedSql parseSqlStatement(String sql) {
Assert.notNull(sql, "SQL must not be null");}
Run Code Online (Sandbox Code Playgroud)
这是另一个:
public NamedParameterJdbcTemplate(DataSource dataSource) {
Assert.notNull(dataSource,
"The [dataSource] argument cannot be null.");
this .classicJdbcTemplate = new JdbcTemplate(dataSource);
}
public NamedParameterJdbcTemplate(JdbcOperations classicJdbcTemplate) {
Assert.notNull(classicJdbcTemplate,
"JdbcTemplate must not be null");
this .classicJdbcTemplate = classicJdbcTemplate;
}
Run Code Online (Sandbox Code Playgroud)
FYI,Assert.notNull(不是assert语句)在util类中定义如下:
public abstract class Assert {
public static void notNull(Object object, String message) {
if (object == null) {
throw new IllegalArgumentException (message);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在我的一个模型上测试一个抛出特定错误的函数.该函数看起来像这样:
def merge(release_to_delete)
raise "Can't merge a release with itself!" if( self.id == release_to_delete.id )
raise "Can only merge releases by the same artist" if( self.artist != release_to_delete.artist )
#actual merge code here
end
Run Code Online (Sandbox Code Playgroud)
现在我想做一个断言,当我用一个导致每个异常的参数调用这个函数时,实际上会抛出异常.我正在查看ActiveSupport文档,但我没有找到任何有希望的东西.有任何想法吗?
我知道static_assert在编译时进行断言,并且assert- 在运行时,但是在实践中有什么区别?据我所知,内心深处它们是代码片段,如
if (condition == false) exit();
Run Code Online (Sandbox Code Playgroud)
static_assert工作,或者只能 工作assert?if声明都做不了吗?Python有一个标志-O,你可以用它来执行解释器.该选项将生成"优化"字节码(写入.pyo文件),并给出两次,它将丢弃文档字符串.从Python的手册页:
-O启用基本优化.这会将已编译(字节码)文件的文件扩展名从.pyc更改为.pyo.给定两次,导致文档字符串被丢弃.
我认为这个选项的两个主要特点是:
删除所有断言语句.为了速度,这可以防止腐败的程序状态.但是,你不需要大量的断言声明才能有所作为吗?你有任何值得的代码(并且理智吗?)
剥离所有文档字符串.什么应用程序的内存使用如此关键,这是一个胜利?为什么不将所有内容都推入用C编写的模块?
这个选项有什么用?它有真实世界的价值吗?
是否大量使用单元测试会阻碍调试断言的使用?看起来在测试代码中的调试断言触发意味着单元测试不应该存在或者调试断言不应该存在."只有一个"似乎是一个合理的原则.这是常见做法吗?或者在单元测试时禁用调试断言,以便它们可以进行集成测试?
编辑:我更新了'Assert'以调试assert,以区分测试代码中的断言与测试运行后检查状态的单元测试中的行.
此外,这里有一个我相信显示困境的例子:单元测试为受保护函数传递无效输入,该函数断言它的输入是有效的.单元测试不存在吗?这不是一个公共职能.也许检查输入会杀死perf?或者断言不存在?该功能不受保护,因此应检查其输入是否安全.
assert ×10
c++ ×2
java ×2
python ×2
unit-testing ×2
assertions ×1
bytecode ×1
expression ×1
header-files ×1
junit ×1
junit4 ×1
objective-c ×1
optimization ×1
raise ×1
sql ×1
t-sql ×1