質問

この種のは別のものの続きです 質問 私の。

基本的に、ファイルにアクセスするためのコードを取得したら (すぐに答えを確認します)、最善の方法は何でしょうか? テスト それ?

たくさんのものを生成するメソッドを作成しようと考えています 背景労働者か何かで、ファイルのロード/保存と、さまざまなファイル/オブジェクト サイズでのテストをすべてに指示します。次に、スレッドから応答を取得して、失敗したか、成功したか、世界を崩壊させたかなどを確認します。

これにアプローチする最善の方法について何か提案をいただけますか?前にも言ったように、これは私にとってまったく新しいことです:)

編集

続く アジュマストルアンの 役職:

私はコンソールアプリを使用して Debug.Asserts でテストしています:)


アップデート

当初は使用して巻いていました 背景労働者 スレッド処理に対処するために (Windows 開発で慣れているので)、続行する前に複数の操作 (スレッド) を完了する必要があるテストを実行しているときに、それがちょっとしたハックになることにすぐに気づきました。これをやるようにしてもらいます。

それから私はフォローアップしました アジュマストリーンの投稿を見て、実際に使用する必要があることに気づきました 同時操作を行うためのクラス。次に、この方法を使用してリファクタリングします (アプローチは異なりますが)。

役に立ちましたか?

解決

.NETでは、 ThreadPool 設定しないとスレッドは返されません ManualResetEventまたは AutoResetEvents.これらは、簡単なテスト方法としてはやりすぎだと思います (作成、設定、管理が複雑であることは言うまでもありません)。バックグラウンド ワーカーもコールバックなどで少し複雑です。

私が見つけたうまくいくものは

  1. スレッドの配列を作成します。
  2. セットアップ ThreadStart 各スレッドのメソッド。
  3. 各スレッドを開始します。
  4. すべてのスレッドで参加します (他のすべてのスレッドが完了するか中止されるまで、現在のスレッドをブロックします)
public static void MultiThreadedTest()
{
    Thread[] threads = new Thread[count];

    for (int i = 0; i < threads.Length; i++)
    {
        threads[i] = new Thread(DoSomeWork());
    }

    foreach(Thread thread in threads)
    {
        thread.Start();
    }

    foreach(Thread thread in threads)
    {
        thread.Join();
    }
}

他のヒント

@ajmastrean、単体テストの結果は予測可能である必要があるため、何らかの方法でスレッドを同期する必要があります。イベントを使用せずにそれを行う簡単な方法がわかりません。

ThreadPool.QueueUserWorkItem を使用すると、そのようなユースケースをテストする簡単な方法が得られることがわかりました。

 ThreadPool.QueueUserWorkItem(x => { 
    File.Open(fileName, FileMode.Open);
    event1.Set(); // Start 2nd tread;
    event2.WaitOne(); // Blocking the file;
});
ThreadPool.QueueUserWorkItem(x => { 
    try
    {
        event1.WaitOne(); // Waiting until 1st thread open file
        File.Delete(fileName); // Simulating conflict
    }
    catch (IOException e)
    {
        Debug.Write("File access denied");
    }
});

あなたのアイデアはうまくいくはずです。基本的には、大量のスレッドを生成し、ファイルを書き込むスレッドが実際にリーダーを待たせるのに十分な時間をかけて実行したいだけです。すべてのスレッドがエラーなく、永久にブロックされずに返された場合、テストは成功です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top