MODIFIED:このコードでは、HttpRequest.InputStreamを使用して要求の本文を読み取り、解析して格納します。私はこのクラスを単体テストすることができるようにしたいと思いますが、私は体に何も付けることはできません。それは可能ですか?たぶん私はAクラスを直接ハックして何らかの価値を持たせることができるかもしれません。カスタム入力ストリームをHttpRequest.InputStreamに貼り付けるには?
を追加しました:ここに単純化されたデザインです。
class A
{
private string _body;
public string Body { get { return _body; } }
public A(HttpRequest r)
{
{parse r and store data, i.e. query parameter, etc. }
_body = {read body from r.InputStream };
}
}
class B
{
public void ProcessRequest(HttpRequest r)
{
var c = new C(r);
ParseBody(c.Body);
}
}
それはすべて良いことだ、私は確かにそれはプライベートだ場合でもParseBodyをテストすることができます。しかし、私はクラスAを単体テストしており、それが問題のあるところです。私はBody R/Wプロパティを作ることができますが、それはAが不変であると思われるためにカプセル化を壊すことです。
回答ありがとうございます。それらはすべて素晴らしい提案ですが、私が継承したコードは上記のように見えます。おそらく、私はInputStreamを使う必要はありませんが、何らかの理由で使用するクラスをクラックさせるかもしれません。 – Schultz9999
コンストラクタを介してストリームを提供することで、すべてを内側に変え、内部の依存関係(context.HttpRequest.InputStream)を取り除きました。 – Schultz9999