小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


フォルダやファイルを削除する際の異常系のテストを簡単に行う方法

はじめに

フォルダやファイルを削除するプログラムをテストする際に、削除できないケース(異常系)のテストをします。これらのテストは、毎回アクセス権を変更したり、もとに戻したりするのが結構面倒だったりします。
簡単に異常系のテストをするには、アクセス権を変更するのではなく、フォルダやファイルを他のプロセスで使用中の状態にすると良いです。

フォルダを削除する場合

VBScriptでフォルダを削除するには、以下のようなプログラムを書きます。

On Error Resume Next
CreateObject("Scripting.FileSystemObject").DeleteFolder "c:\work\hoge"
If Err.Number <> 0 Then
  Call WScript.Echo(Err.Number)
  Call WScript.Echo(Err.Source)
  Call WScript.Echo(Err.Description)
  WScript.Quit(0)
End If
WScript.Echo("削除しました。")

削除に失敗した場合に、エラーメッセージがでるかどうかをテストするには、c:\work\hogeフォルダの中にファイルを用意して、それをテキストエディタで編集中にします。
この状態でスクリプトを実行すると、フォルダを削除できないため、以下のようなメッセージが表示されます。

C:\work>cscript deletefolder.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

70
Microsoft VBScript 実行時エラー
書き込みできません。

C:\work>
ファイルを削除する場合

VBScriptでファイルを削除するには、以下のようなプログラムを書きます。

On Error Resume Next
CreateObject("Scripting.FileSystemObject").DeleteFile "c:\work\hoge\hoge.txt"
If Err.Number <> 0 Then
  Call WScript.Echo(Err.Number)
  Call WScript.Echo(Err.Source)
  Call WScript.Echo(Err.Description)
  WScript.Quit(0)
End If
WScript.Echo("削除しました。")

ファイルの削除に失敗させるには、hoge.txtというファイルを用意して、排他制御機能のあるテキストエディタで編集中にします。この状態でスクリプトを実行すると、ファイルにロックがかかっているため、エラーになります。
Windowsに標準搭載されているメモ帳では、編集中にもかかわらず別プロセスから削除できてしまうため、秀丸など他のテキストエディタを使用するのが良いです。

おわりに

上記のようにフォルダやファイルを削除するテストを行う際は、アクセス権を変えるよりも編集中の状態をつくりだし、プロセスによるロックをかけたほうが簡単です。テキストエディタを閉じれば、ロックは解除されるので、アクセス権を元に戻すという手間もありません。