たとえば、2つのプロパティを持つインターフェイスSomeClass
を実装するクラスがあります(セッターはありません!!!そして依存します):ISomeInterface
Prop1
Prop2
Prop1
Prop2
Prop1
public class SomeClass : ISomeInterface
{
private readonly NameValueCollection settings = ConfigurationManager.AppSettings;
private readonly string p1;
private string p2;
public string Prop1 { get { return settings["SomeSetting"]; } }
public string Prop2
{
get
{
switch(Prop1)
{
case "setting1": return "one";
case "setting2": return "two";
case "setting3": return "three";
default: return "one";
}
}
set { p2 = value; }
}
}
このクラスの単体テストを作成する必要があります。私はそれらが次のように見えるべきであることを提案します:
[TestMethod]
public void Prop2ShouldReturnOneValueIfSomeSettingEqualsSetting1()
{
var someClass = new SomeClass();
Assert.Areequals(someClass.Prop2, "one");
}
[TestMethod]
public void Prop2ShouldReturnTwoValueIfSomeSettingEqualsSetting2()
{
var someClass = new SomeClass();
Assert.Areequals(someClass.Prop2, "two");
}
だから私の質問は:How can I force Prop1 return setting1, setting2 etc. if it has no setter?
私はそれらがプライベートであるため、フィールドに必要な値を設定することはできません。私はモックするべきですISomeInterface
かConfigurationManager
?ConfigurationManager
もしそうなら、それがインターフェースを持っていない場合、どうすればモックできますか?ConfigurationManager
クラスを直接モックする必要がありますか?それは正しいでしょうか?また、どうすればモックできるのかわかりませんISomeInterface
。prop2
に依存するテストが必要prop1
です。私がタイプした場合:
[TestMethod]
public void Prop2ShouldReturnTwoValueIfSomeSettingEqualsSetting2()
{
var moqSettings = new Mock<ISomeInterface>();
moqSettings.Setup(p => p.Prop1).Returns("setting2");
...
}
になるので、何も変わりませmoqSettings.Object.Prop2
んnull
。そして、よくわかりませんが、そうするのは間違っていると思います)))So how can I test all cases in prop2???
PSモックには。を使用しますMoq
。PPS英語で申し訳ありません)))必要なものを明確に説明したいと思います...