我正在为我的数据库编写集成测试,我有一个问题。在测试方法开始时,我将一些对象添加到数据库中,在方法结束时我应该将其删除。
所以我有一个像这样的代码:
var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
_provider.RemoveGroup(UserLogin, group.ID);
Run Code Online (Sandbox Code Playgroud)
关键是如果断言失败,RemoveGroup 将不会被执行。我该怎么办?
如果我尝试这个:
var group = new ContactGroup { Name = UserLogin + "_test_group" };
group.ID = _provider.AddGroup(UserLogin, group);
try
{
Assert.That(_provider.GetGroup(UserLogin, group.ID), Is.Not.Null);
}
finally
{
_provider.RemoveGroup(UserLogin, group.ID);
}
Run Code Online (Sandbox Code Playgroud)
我应该像这样重新抛出 AssertionException
catch (AssertionException)
{
throw;
}
Run Code Online (Sandbox Code Playgroud)
?
当我运行以下内容时:
growthRates = [3, 4, 5, 0, 3]
for each in growthRates:
print each
assert growthRates >= 0, 'Growth Rate is not between 0 and 100'
assert growthRates <= 100, 'Growth Rate is not between 0 and 100'
Run Code Online (Sandbox Code Playgroud)
我明白了:
3
Traceback (most recent call last):
File "ps4.py", line 132, in <module>
testNestEggVariable()
File "ps4.py", line 126, in testNestEggVariable
savingsRecord = nestEggVariable(salary, save, growthRates)
File "ps4.py", line 106, in nestEggVariable
assert growthRates <= 100, 'Growth Rate is not between 0 and …Run Code Online (Sandbox Code Playgroud) 我试图用RhinoMocks声明某个属性设置器被调用.但它没有按预期工作.
以下简化示例说明了该问题.
考虑这个界面:
public interface IMyInterface
{
string SomeProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在考虑以下代码:
var mock = MockRepository.GenerateStub<IMyInterface>();
mock.SomeProperty = "abc";
mock.AssertWasCalled(x => x.SomeProperty = Arg<string>.Is.Anything);
Run Code Online (Sandbox Code Playgroud)
我期待最后一行的断言会毫无问题地通过.但是,它正在抛出ExpectationViolationException这条消息:
"IMyInterface.set_SomeProperty(任何东西);预期#1,实际#0."
我不明白为什么会发生这种情况.有人可以帮忙吗?
我正在尝试比较包含自定义对象的 2 个列表(包装在一个对象中)。我不关心顺序,但是如果列表 1 包含“1,2,3,4”,那么列表 2 必须并且只包含这些元素。例如:“4,2,3,1”
基于比较两个 List<T> 对象的相等性,忽略顺序 ignoring-order 我使用了 except 和 Any 但它没有给我想要的结果。
如果我使用Assert.Equals它失败,但Assert.IsTry(list1.equals(list2))成功。
此外,如果我删除 Equals 和 GetHashCode 实现,则两个测试都会失败。
public class AppointmentCollection : List<Appointment>
{
public override bool Equals(object obj)
{
var appCol = obj as AppointmentCollection;
if (appCol == null)
{
return false;
}
return (appCol.Count == this.Count) && !(this.Except(appCol).Any());
}
public override int GetHashCode()
{
unchecked
{
//use 2 primes
int hash = 17;
foreach (var appointment in …Run Code Online (Sandbox Code Playgroud) 目前我有一个循环字典的测试用例,每个字典都包含一个我想在网页上测试的单独值(我使用的是 Selenium Webdriver,尽管这不一定与问题相关)。这个测试用例基本上将检查产品的所有可能的购买路径是否正常工作,结果大约有 200 条不同的路径。我想保持代码简单,而不是对每一个都进行测试。以下是我为缩短代码所做的工作的示例:
self.templates = {"sales": self.sales", ...)
self.template_keys = ["sales",....]
self.sales - {"locator1": "<locataor info>, ...)
.... <more dictionaries>
for key in self.template_keys:
for template in self.templates[key]:
<do purchase path in selenium webdriver>
assert end_url == expected_end_url # Would like failure to not end test
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让嵌套 for 循环中的断言不会致命失败并继续下一步。我读过这篇 stackoverflow 文章,似乎他决定做自己的事情,而没有提供任何关于他所做的事情的信息。我知道这是一种反模式,但不值得花时间将它们全部单独写出来。我想知道是否有人有一个很好的解决方案,就像 Groovy 中的软断言一样。
我想捕获代码生成的TypeError,但不幸的是,unittest失败:
这是代码:
import unittest
class _Foo(object):
def __init__(self):
self.bar = ['AAA']
def _validate_bar(self, bar):
if not isinstance(bar, list):
raise TypeError
return True
class Foo(_Foo):
def __init__(self, bar=None):
super(Foo, self).__init__()
if bar and self._validate_bar(bar):
self.bar = bar
class FooTest(unittest.TestCase):
def test_bar_as_string(self):
self.assertRaises("TypeError", Foo("a"))
#def test_a(self):
# try:
# Foo('a')
# except Exception as exc:
# self.assertEqual('TypeError', exc.__class__.__name__)
#def test_bar_as_string(self):
# with self.assertRaises("TypeError"):
# Foo("a")
if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)
这是错误:
test_bar_as_string (__main__.FooTest) ... ERROR
======================================================================
ERROR: test_bar_as_string (__main__.FooTest)
----------------------------------------------------------------------
Traceback (most recent …Run Code Online (Sandbox Code Playgroud) 我有这两个值:
Expected Value (fResult)= 103393.431493782901937514
Actual Value (output) = 103393.431493782901937514
Run Code Online (Sandbox Code Playgroud)
当我断言价值时,我的预期结果被认为是 103393.431493783m
因此,我的 Assert 失败了。任何人都可以在这方面提供帮助。
Assert.That(output, Is.EqualTo(fResult));
Run Code Online (Sandbox Code Playgroud)
更多信息:实际值和预期值都是十进制数据类型,
[TestCase("value1", "value2", 5, 103393.431493782901937514)]
public void converFormulaforPressure(String Fromunit, String toUnit, decimal Avalue, decimal fResult) {
var output = ut1.Convert(ut1.GetUnit("Pressure", Fromunit), ut1.GetUnit("Pressure", toUnit), Avalue).Val;
Assert.That(output, Is.EqualTo(fResult));
}
Run Code Online (Sandbox Code Playgroud)
ut1.Convert 是一种转换值并给出实际结果的方法。
这是一个PHPUnit测试:
class EqualsTest extends PHPUnit_Framework_TestCase
{
public function testSuccess()
{
$this->assertEquals(array('01', 'a', 'b'), array(1, 'a', 'b'));
}
}
Run Code Online (Sandbox Code Playgroud)
'01'是一个字符串,1是一个整数,但是测试没有失败! assertEquals不比较类型...如何克服这个问题?
我正在尝试简化以下内容:
if x < 0:
print('we don't do negative numbers')
else:
NORMAL CODE HERE
Run Code Online (Sandbox Code Playgroud)
我最近了解了这个assert命令,并且钦佩它将我之前的行简化为:
assert x > 0, 'errorText'
NORMAL CODE HERE
Run Code Online (Sandbox Code Playgroud)
不过,我不希望错误给予追溯.我只想要像if/else那样的单行.
有没有办法让assertionError像异常那样返回单行,或者我是否真的需要继续运行if/else的处处?
我想弄清楚写Haskell等价的最佳做法是什么assert(0).我知道类型安全性要求必须返回一个整数scanList,但是我想知道是否有比我写的更好的方法.有没有办法避免923那些卡在那里的任意数字?
module Main (main) where
import Control.Exception (assert)
l = [
Left "1",
Left "1",
Right 1,
Right 1,
Left "9"]
scanList :: [ Either String Int ] -> Int
scanList [ ] = 0
scanList (x:xs) = case x of
Right i -> i + scanList xs
Left s ->
if read s < 8
then read s + scanList xs
else assert False $ 923
main = do
print $ scanList l
Run Code Online (Sandbox Code Playgroud) assert ×10
python ×4
c# ×3
nunit ×3
unit-testing ×3
collections ×1
comparison ×1
haskell ×1
less ×1
logic ×1
php ×1
phpunit ×1
rhino-mocks ×1
selenium ×1