2017-03-08 7 views
1

私の最初のTestMethodは期待通りに完了しました。私はSetValueメソッドをテストしました。SetValueテストは私のPeriodクラスで成功しましたが、私のNameクラスで失敗しました

p1 = new DateTimePeriod { From = DateTime.MinValue, To = DateTime.MaxValue }; 
p2 = new DateTimePeriod { From = DateTime.MaxValue, To = DateTime.MinValue }; 

[TestMethod] 
public void SetPeriodTest() 
{ 
    b.SetValue(ref p1, p2); 
    Assert.AreEqual(DateTime.MaxValue, p1.From); 
    Assert.AreEqual(DateTime.MinValue, p1.To); 
} 

しかし、次のテストは失敗します。明らかにx.ANamex.Validおよびx.Idはnullですが、私はp1.Fromp1.Toと同じ方法で設定しました。これらのプロパティがnullを返すのはなぜですか?

[TestMethod] 
public void SetNameTest() 
{ 
    var x = new Name { AName = "Jack", Valid = p1, Id = "123" }; 
    var y = new Name { AName = "John", Valid = p2, Id = "321" }; 
    b.SetValue(ref x, y); 
    Assert.AreEqual("John", x.AName); 
    Assert.AreEqual(p2, x.Valid); 
    Assert.AreEqual("321", x.Id); 
} 

EDIT:

public class Name: Base 
{ 
    private string id; 
    public string Id 
    { 
     get { return id; } 
     set { SetValue(ref id, value); } 
    } 
    private string aName; 
    public string AName 
    { 
     get { return aName; } 
     set { SetValue(ref aName, value); } 
    } 
    private DateTimePeriod valid; 
    public DateTimePeriod Valid 
    { 
     get { return valid; } 
     set { SetValue(ref valid, value); } 
    } 
} 

public class DateTimePeriod: Period<DateTime> 
{ 
} 

public class Period<T>: Base 
{ 
    private T from; 
    private T to; 
    public Period() 
    { 
     from = default(T); 
     to = default(T); 
    } 
    public T From 
    { 
     get { return from; } 
     set { SetValue(ref from, value); } 
    } 
    public T To 
    { 
     get { return to; } 
     set { SetValue(ref to, value); } 
    } 
} 

EDIT2:私はユニットテストであなたのコードをデバッグする場合

public class Base: object 
{ 
    public void SetValue<T>(ref T field, T value) 
    { 
     if (field == null) return; 
     if (field.Equals(value)) return; 
     field = value; 
     DoOnChanged(); 
    } 
    public event EventHandler OnChanged; 
    protected void DoOnChanged() 
    { 
     if (OnChanged == null) return; 
     OnChanged(this, null); 
    } 
} 
+0

はx.ANameなので、nullでもyでもいいですか? – SeeuD1

+0

両方がヌルです... –

答えて

0

、何の問題もなく働いてit's。私はBaseSetValueについてあなたが何を使用しているのか分かっていないので、セッターを通常の使用に変更しました。

しかし、ユニットテストは、このコードで細かい作業している:

namespace SampleUnitTest 
{ 
    [TestClass] 
    public class Foo 
    { 
     [TestMethod] 
     public void Bar() 
     { 
      var p1 = new DateTimePeriod { From = DateTime.MinValue, To = DateTime.MaxValue }; 
      var p2 = new DateTimePeriod { From = DateTime.MaxValue, To = DateTime.MinValue }; 
      var x = new Name { AName = "Jack", Valid = p1, Id = "123" }; 
      var y = new Name { AName = "John", Valid = p2, Id = "321" }; 
      Assert.AreEqual("John", x.AName); 
      Assert.AreEqual(p2, x.Valid); 
      Assert.AreEqual("321", x.Id); 
     } 
    } 

    public class Name 
    { 
     private string id; 
     public string Id 
     { 
      get { return id; } 
      set { id = value; } 
     } 
     private string aName; 
     public string AName 
     { 
      get { return aName; } 
      set { aName = value; ; } 
     } 
     private DateTimePeriod valid; 
     public DateTimePeriod Valid 
     { 
      get { return valid; } 
      set { valid = value ; } 
     } 
    } 

    public class DateTimePeriod : Period<DateTime> 
    { 
    } 

    public class Period<T> 
    { 
     private T from; 
     private T to; 
     public Period() 
     { 
      from = default(T); 
      to = default(T); 
     } 
     public T From 
     { 
      get { return from; } 
      set { from = value; } 
     } 
     public T To 
     { 
      get { return to; } 
      set { to = value; } 
     } 
    } 
} 

私はSetValueはまたあなたDateTimeが動作していると、あなたの他のクラスはドント理由だと思います。

+0

私はそれらを初期化しました。実際には[TestInitialize]にありますが、コードはANameとIdでも機能しません。 –

+0

完全なtestmethodを投稿できますか? – SeeuD1

+0

基本的にあなたの答えと同じです。 DateTimePeriod(DateTime値を含む)が機能するが、Name(StringおよびDateTimeを含む)が機能しない理由を理解することに問題がある。異なる型を使用するクラスではプロパティ値を指定できませんが、DateTime値のみを使用するクラスは完全に動作しています。 –

関連する問題