私の最初の試み、次のようなF#の単純なタイプを考えてみましょう。
type Test() =
inherit BaseImplementingNotifyPropertyChangedViaOnPropertyChanged()
let mutable prop: string = null
member this.Prop
with public get() = prop
and public set value =
match value with
| _ when value = prop -> ()
| _ ->
let prop = value
this.OnPropertyChanged("Prop")
ここで、C#を介してこれをテストします(このオブジェクトはC#プロジェクトに公開されているため、明らかなC#セマンティクスが望ましいです)。
[TestMethod]
public void TaskMaster_Test()
{
var target = new FTest();
string propName = null;
target.PropertyChanged += (s, a) => propName = a.PropertyName;
target.Prop = "newString";
Assert.AreEqual("Prop", propName);
Assert.AreEqual("newString", target.Prop);
return;
}
propName
が適切に割り当てられ、F#Setterが実行されていますが、の基になる値がprop
変更されていないため、2番目のアサートが失敗しています。mutable
この種の意味は、フィールドから削除してprop
もエラーが生成されないためです(値を変更しようとしているため、エラーが発生するはずです)。基本的な考え方が欠けているに違いないと思います。
単体テストに合格できるようprop
に、クラスで再バインド/変更する正しい方法は何ですか?Test