2016-06-16 26 views
3

我將我的項目從nunit 2.6.3遷移到3.2.1。我發現「Randomizer」類從「NUnit.Framework」移動到「NUnit.Framework.Internal」,但我找不到Randomizer.GetDoubles或任何等效的方法。Nunit中的Randomizer 3

對此有何想法?

感謝

回答

1

隨機數發生器類已被移動,並且現在通過TestContext.CurrentContext.Random訪問。

不再有Randomizer.GetDoubles,但有一個Randomizer.NextDouble(double min, double max)方法。

[Docs]

+1

所以我需要使用_NextDouble_重寫_GetDoubles_方法?爲什麼有這樣的決定? –

+0

@atrwsr他們做了很多重大更改,我正在努力將我的代碼遷移到v3。這就像一堵大牆,我想很多變化都是錯誤的。 –

0

如果已經使用具有與種子一起GetDoubles一個Randomizer可以在NUnit的3替換代碼:

var randomizer = new Randomizer(seed); 
double[] values = Enumerable.Repeat(randomizer.NextDouble(min, max), times).ToArray(); 

Randomizer類是可通過NUnit.Framework.Internal命名空間。

+0

嗨德揚,我用你的方法,但沒有得到預期的結果。值都一樣。 –

+0

@ Leal.li:你嘗試過不同的種子嗎? – Dejan

+0

感謝您的快速響應,我的意思是,我通過倍數設置相同的種子獲得隨機值,它只獲得相同的值。如果通過設置不同的種子,我想測試1000次,這是否意味着我需要設置1000個種子?它是不是太不友好?不能像「[Random(-128,127,3)]」那樣方便 –

0

@Dejan 是的,我很抱歉試圖通過產生的Randomizer類方法,一組測試數字,和NUnit的ValueSource屬性導入以下測試numbers.The是我目前的做法。
我知道這個方法不好,所以我想問一下其他好的方法。

public static double[] GetDoubleInRangeNums() 
    { 
     List<double> list = new List<double>(); 
     double k = 0; 
     list.Add(double.MinValue); 
     list.Add(double.MaxValue); 
     for (int i = 0; i < 3; i++) 
     { 
      k = randomizer.NextDouble(double.MaxValue); 
      if (!list.Contains(k)) 
      { 
       list.Add(k); 
      } 
     } 
     return list.ToArray(); 
    } 

    [Test] 
    [Category("DataType.Double")] 
    public void DoubleInRangeTest([ValueSource("GetDoubleInRangeNums")]double value, [Values(1)]int flag) 
    { 
     string tableName = "DataTypeDouble"; 
     string columnType = "double precision"; 
     CreateTable(tableName, columnType); 
     EsgynDbDataType_FloatPointNum(tableName, value, value, EsgynDBType.Double, flag); 
    }