1
ユニットテストでは、最初に3つのオブジェクト(記事)を作成します。テストが完了した後、私はmedia_root
フォルダに3つの画像があることに気付きました。単体テスト後の画像ファイルの削除方法は?
質問:テスト終了後に作成された画像を削除するにはどうしたらいいですか?
P.S.次のコードを使用しようとしましたが、media_root
フォルダーを削除しました。
def tearDown(self):
rmtree(settings.MEDIA_ROOT, ignore_errors=True)
注:メソッドtest_article_form_valid
とtest_article_crud
の問題点。
tests.py:
class ArticleTestCase(TestCase):
def setUp(self):
self.image = open(os.path.join(BASE_DIR, 'static/images/tests/image.jpg'), "r")
def test_article_form_valid(self):
data = {
'head': 'TEXT',
}
files_data = {
'image': SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
}
form = ArticleForm(data=data, files=files_data)
self.assertTrue(form.is_valid()) <-- ERROR
def test_article_crud(self):
response = self.client.get(reverse("article:article_create"))
self.assertEquals(response.status_code, 200)
response = self.client.post(
reverse("article:article_create"),
data={
'head': 'TEST',
'image': self.image
},
follow=True,
format='multipart'
)
self.assertEqual(response.status_code, 200)
self.assertEqual(Article.objects.all().count(), 1) <-- ERROR
def test_article_view(self):
first_article = Article.objects.create(
pk=150,
head='First',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
second_article = Article.objects.create(
pk=160,
head='Second',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
third_article = Article.objects.create(
pk=170,
head='Third',
image=SimpleUploadedFile(
name=self.image.name,
content=self.image.read(),
content_type='image/jpeg'
)
)
[***]
ERROR:Pythonで
FAIL: test_article_crud (article.tests.ArticleTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 55, in test_article_crud
self.assertEqual(Article.objects.all().count(), 1)
AssertionError: 0 != 1
======================================================================
FAIL: test_article_form_valid (article.tests.ArticleTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/nurzhan/CA/article/tests.py", line 117, in test_article_form_valid
self.assertTrue(form.is_valid())
AssertionError: False is not true
しかし、OPはディレクトリを保持したいだけで、その中からファイルを削除すると思います。 – SiHa
@SiHa絶対に正しい!私は私のテストで作成されたイメージファイルのみを削除する必要があります。フォルダに触れないでください。他のアイデアはありますか? –
テストのポイントは、実際のデータベースやテストに影響を与えずに特定の機能を模擬することです。 'tempfile'モジュールを使用する場合は、実際のイメージオブジェクトを作成する必要はありませんが、それらのモックを作成し、テストした後、オブジェクトは自動的に削除されます。ファイルの削除についての質問は発生しません。ファイルは作成されず、実行時に作成され破棄されます。 – zaidfazil