除了块外,SystemExit没有被unittest捕获

时间:2016-01-08 10:38:15

标签: python-2.7 unit-testing

我有测试检查方法是否会引发.git/ref/head/mastar 当metod直接使用SystemExit时,test会正确捕获它。问题在于以下代码:

sys.exit()

程序已终止,但测试失败并显示def module(x): try: int(x) except ValueError: print('Wrong value') sys.exit() 我不明白什么是错的。即使我将最后一行更改为AssertionError: SystemExit not raised,测试也会失败。

//修改

这是我的测试声明:

raise SystemExit

1 个答案:

答案 0 :(得分:0)

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height" android:background="@drawable/side_nav_bar" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:theme="@style/ThemeOverlay.AppCompat.Dark" android:orientation="vertical" android:gravity="bottom"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:src="@android:drawable/sym_def_app_icon" android:id="@+id/imageView" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="Android Studio" android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android.studio@android.com" android:id="@+id/textView" /> </LinearLayout> 用作上下文管理器时,它应该只接受一个输入参数 - 一种要捕获的异常。

其他参数只能在表单中使用:

assertRaises

以下代码:

self.assertRaises(exc_type, callable, *args, **kwargs)

产生输出:

import sys
import unittest


def f(x):
    try:
        int(x)
    except ValueError:
        print('Wrong value')
        sys.exit()


class MyTests(unittest.TestCase):
    def test_id_not_number(self):
        with self.assertRaises(SystemExit) as cm:
            f('id')
            self.assertEqual(cm.exception, "Error")

unittest.main()