我正在使用 django 1.10.5 和 PermissionRequiredMixin。
如果他们没有正确的权限,我不想将用户重定向到登录名,而是返回 403 错误。
理论上,如果在任何地方引发 PermissionDenied,则响应对象的 status_code 应为 403:
测试客户端不可见的唯一例外是 Http404、PermissionDenied、SystemExit 和 SuspiciousOperation。Django 在内部捕获这些异常并将它们转换为适当的 HTTP 响应代码。在这些情况下,您可以在测试中检查 response.status_code。
从文档:https : //docs.djangoproject.com/en/1.10/topics/testing/tools/#exceptions
但是,我的测试停止在异常 django.core.exceptions.PermissionDenied 这是最简单的 test.py:
from django.test import TestCase, RequestFactory
from doingTests.views import ViewWithPermission
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
class TestPermission(TestCase):
def test_permission_view(self):
user = User.objects.create(username="john", password="doh")
permView = ViewWithPermission.as_view()
rf = RequestFactory()
request = rf.get('/test/')
request.user = user
self.assertEqual(permView(request).status_code, 403)
Run Code Online (Sandbox Code Playgroud)
有了这个 view.py:
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic.base import TemplateView
class ViewWithPermission(PermissionRequiredMixin, …Run Code Online (Sandbox Code Playgroud) 我正在学习Fortran,并且想将数组和子例程封装为一种类型。问题似乎出在自对象的类型定义中。
这是我想出的最小测试用例:
module testing
implicit none
type test(para)
integer, len :: para
real, dimension(para) :: weights
contains
procedure :: testing => testing_test
end type
contains
subroutine testing_test(self)
class(test(*)) :: self
end subroutine
end module
Run Code Online (Sandbox Code Playgroud)
使用gfortran进行编译会引发以下错误:
module_test.f08:9:23:
procedure :: testing => testing_test
1
Error: Argument ‘self’ of ‘testing_test’ with PASS(self) at (1) must be of the derived-type ‘test’
Run Code Online (Sandbox Code Playgroud)
它在固定数组长度(因此type%para不存在)时起作用
我要做什么(带有可变大小的数组和绑定过程的类型)很简单,还是我缺少有关伪参数定义的内容?