Loading...
Loading...
Compare original and translation side by side
undefinedundefinedundefinedundefinedundefinedundefinedundefinedundefinedtest_<doctype_name>.pyundefinedtest_<doctype_name>.pyundefineddef tearDown(self):
# Cleanup
frappe.delete_doc("Sample Doc", self.doc.name, force=True)
def test_creation(self):
self.assertEqual(self.doc.title, "Test Document")
def test_validation(self):
doc = frappe.get_doc({
"doctype": "Sample Doc",
"title": "" # Invalid - required field
})
self.assertRaises(frappe.ValidationError, doc.insert)
def test_workflow(self):
self.doc.status = "Approved"
self.doc.save()
self.assertEqual(self.doc.status, "Approved")undefineddef tearDown(self):
# Cleanup
frappe.delete_doc("Sample Doc", self.doc.name, force=True)
def test_creation(self):
self.assertEqual(self.doc.title, "Test Document")
def test_validation(self):
doc = frappe.get_doc({
"doctype": "Sample Doc",
"title": "" # Invalid - required field
})
self.assertRaises(frappe.ValidationError, doc.insert)
def test_workflow(self):
self.doc.status = "Approved"
self.doc.save()
self.assertEqual(self.doc.status, "Approved")undefinedundefinedundefined # Create test order
order = frappe.get_doc({
"doctype": "Sales Order",
"customer": "_Test Customer"
}).insert()
# Test the API
result = process_order(order.name, "approve")
self.assertEqual(result["status"], "success")
# Cleanup
frappe.delete_doc("Sales Order", order.name, force=True)
def test_permission_denied(self):
# Test as restricted user
frappe.set_user("guest@example.com")
from my_app.api import sensitive_action
self.assertRaises(frappe.PermissionError, sensitive_action, "doc-001")
# Reset user
frappe.set_user("Administrator")undefined # Create test order
order = frappe.get_doc({
"doctype": "Sales Order",
"customer": "_Test Customer"
}).insert()
# Test the API
result = process_order(order.name, "approve")
self.assertEqual(result["status"], "success")
# Cleanup
frappe.delete_doc("Sales Order", order.name, force=True)
def test_permission_denied(self):
# Test as restricted user
frappe.set_user("guest@example.com")
from my_app.api import sensitive_action
self.assertRaises(frappe.PermissionError, sensitive_action, "doc-001")
# Reset user
frappe.set_user("Administrator")undefineddef test_role_permissions(self):
# Create user with specific role
user = frappe.get_doc({
"doctype": "User",
"email": "test_user@example.com",
"roles": [{"role": "Sales User"}]
}).insert()
frappe.set_user("test_user@example.com")
# Test permission
self.assertTrue(frappe.has_permission("Sales Order", "read"))
self.assertFalse(frappe.has_permission("Sales Order", "delete"))
# Cleanup
frappe.set_user("Administrator")
frappe.delete_doc("User", user.name, force=True)def test_role_permissions(self):
# Create user with specific role
user = frappe.get_doc({
"doctype": "User",
"email": "test_user@example.com",
"roles": [{"role": "Sales User"}]
}).insert()
frappe.set_user("test_user@example.com")
# Test permission
self.assertTrue(frappe.has_permission("Sales Order", "read"))
self.assertFalse(frappe.has_permission("Sales Order", "delete"))
# Cleanup
frappe.set_user("Administrator")
frappe.delete_doc("User", user.name, force=True)undefinedundefined
Reference in tests:
```python
class TestSampleDoc(FrappeTestCase):
def test_fixture_loaded(self):
doc = frappe.get_doc("Sample Doc", "Test Record 1")
self.assertIsNotNone(doc)
在测试中引用:
```python
class TestSampleDoc(FrappeTestCase):
def test_fixture_loaded(self):
doc = frappe.get_doc("Sample Doc", "Test Record 1")
self.assertIsNotNone(doc)undefinedundefinedundefinedundefinedbench --site <site> run-tests --app my_appbench --site <site> run-tests --app my_apptest_frappe.set_user("Administrator")test_frappe.set_user("Administrator")tearDown()frappe.db.rollback()frappe.set_user()tearDown()frappe.db.rollback()frappe.set_user()| 错误类型 | 失败原因 | 修复方案 |
|---|---|---|
未使用 | 缺少测试初始化/清理逻辑 | 继承 |
| 未执行数据库回滚 | 测试污染,导致不稳定测试 | 在tearDown中使用 |
| 异步测试不稳定 | 间歇性失败 | 使用 |
| 测试实现细节而非行为 | 测试用例脆弱 | 测试结果而非内部方法调用 |
| 硬编码测试数据 | 与现有数据冲突 | 使用唯一名称,如 |
| 跳过权限测试 | 存在安全漏洞 | 使用不同用户角色进行测试,而非仅用管理员 |
| Mistake | Why It Fails | Fix |
|---|---|---|
Not using | Missing test setup/teardown | Extend |
| Missing db rollback | Test pollution, flaky tests | Use |
| Flaky async tests | Intermittent failures | Use |
| Testing implementation not behavior | Brittle tests | Test outcomes, not internal method calls |
| Hardcoded test data | Conflicts with existing data | Use unique names like |
| Skipping permission tests | Security holes | Test with different user roles, not just Administrator |