6

次のクラスが与えられた場合、単体テストをどのように記述しますか? ファイル IO を実行するテストは単体テストではないことを読みましたが、これは記述する必要がある統合テストですか? 私はテストに xUnit と MOQ を使用していますが、非常に慣れていないので、ファイルを MOQ できますか? わからない。

public class Serializer
{
    public static T LoadFromXmlFile<T>(string path)
        where T : class
    {
        var serializer = new XmlSerializer(typeof(T));

        using (var reader = new StreamReader(path))
        {
            return serializer.Deserialize(reader) as T;
        }
    }

    public static void SaveToXmlFile<T>(T instance, string path)
    {
        var serializer = new XmlSerializer(typeof(T));

        using (var writer = new StreamWriter(path))
        {
            serializer.Serialize(writer, instance);

            writer.Flush();
        }
    }
}
4

2 に答える 2

6

同様の状況で、(状況に応じて) TextWriter または Stream を受け入れるようにメソッド シグネチャを変更し、StringWriters または MemoryStreams を渡して、結果の文字列またはバイト配列を期待される結果と比較することで単体テストを行いました。そこから、パスが有効であり、必要なアクセス許可があると仮定すると、FileWriter または FileStream がファイルに同じ出力を生成するというかなり安全な仮定になります。

于 2013-08-15T01:09:22.430 に答える
1

おそらくこれは、書く必要のないテストの例です。

しかし、実際のファイルレベルのものをテストしたい場合. 既知のファイルを特定の場所に書き出してから、読み込んだファイルのバイナリが事前に用意されたバイナリ ストリームと同じであることをテストできます。

于 2013-08-15T11:48:14.197 に答える