我有一个django_rest_framework测试(问题与常规django测试相同),如下所示:
from rest_framework.test import APITestCase
class APITests(APITestCase):
# tests for unauthorized access
def test_unauthorized(self):
...
for api in apipoints:
response = self.client.options(api)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
我有一个失败的网址,终端显示:
失败:test_unauthorized(app.misuper.tests.APITests) -------------------------------------------------- -------------------- Traceback(最近一次调用最后一次):文件 " /家庭/亚历/... 34;,
第64行,在test_unauthorized
中self.assertEqual(response.status_code,status.HTTP_403_FORBIDDEN)AssertionError:200!= 403
好的,我怎么知道哪个网址未通过测试?我正在遍历所有需要登录的网址,即许多网址,如何打印未通过测试的网址?
答案 0 :(得分:1)
对于简单的快速修复,您可以在断言方法的第三个参数中传递apipoint
:
>>> from unittest import TestCase
>>> TestCase('__init__').assertEqual(1, 2, msg='teh thing is b0rked')
AssertionError: teh thing is b0rked
在单元测试的精神中,这些应该是每种不同的测试方法,而不是只有一种测试方法。查看nose_parameterized以获取更多干燥的帮助。你会像这样装饰测试方法:
from nose_parameterized import parameterized
@parameterized.expand(apipoints)
def test_unauthorized(self, apipoint):
response = self.client.options(apipoint)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
装饰器将为每个端点生成不同的测试方法,以便它们可以彼此独立地通过/失败。
虽然此软件包名称中包含nose
unittest
,例如py.test
和#import "ViewController.h"
#import "Popup.h"
@interface ViewController ()<UIPopoverPresentationControllerDelegate>
{
Popup * popupController;
UIPopoverPresentationController *popupPresentationController;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)popupOnClick:(id)sender {
popupController=[self.storyboard instantiateViewControllerWithIdentifier:@"Popup"];
popupController.modalPresentationStyle=UIModalPresentationPopover;
popupPresentationController= [popupController popoverPresentationController];
popupPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;
popupController.preferredContentSize=CGSizeMake(150, 300);
popupPresentationController.delegate = self;
[self presentViewController:popupController animated:YES completion:NULL];
// in case we don't have a bar button as reference
popupPresentationController.sourceView = _popupButton;
popupPresentationController.sourceRect = _popupButton.frame;
}
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection {
return UIModalPresentationNone;
}
@end
。