2011-03-03 85 views
1

我想在MSTest中测试具有可选参数的方法。单元测试中的可选参数

private CalcSomthing(double valueone, double valuetwo = 10) 
{ 
    // Do somthing 
} 

当我调用此方法时,它工作正常。但是,我运行它在单元测试(MSTest)Valuetwo不会初始化为值10.

MSTest无法测试可选参数或我错了吗?

[TestMethod] 
    public void CalcSomthingTest() 
    { 
     var someclass= new Someclass_Accessor(); 
     someclass.CalcSomthing(10); 
    } 

结果是:Valueone = 10和ValueTwo = 0.0;

回答

0

该测试通过在Visual Studio 2010:

using Microsoft.VisualStudio.TestTools.UnitTesting; 

namespace TestProject1 
{ 
    public class Someclass 
    { 
     public double CalcSomthing(double valueone, double valuetwo = 10) 
     { 
      Assert.IsTrue(valuetwo == 10); 
      return valueone + valuetwo; 
     } 
    } 

    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void CalcSomthingTest() 
     { 
      var someclass = new Someclass(); 
      someclass.CalcSomthing(10); 
     } 
    } 
} 

在任何ReSharper的或TestRunner的:

------测试开始:大会:TestProject1.dll ----- -

1通过,0失败,0跳过,花了1.14秒(MSTest 10.0)。

+0

我已经在TestProjekt中测试了你的解决方案,它的工作原理。在我的项目中的问题是,我使用SomeClass_Accessor,然后它不起作用。 – San 2011-03-08 12:28:22

+0

我不确定你的意思是* SomeClass_Accessor *。你能用可编译的(可测试的)东西来更新你的例子吗?我想知道你的失败例子是否有编译器正在进行优化,因为代码没有使用该参数? – 2011-03-08 17:56:52

+0

很久以前我就知道了。 我想测试私有方法,为此我需要Accessor。 只要我使用Accessor它不再工作。 – San 2011-10-18 12:52:56

0

同意它的问题。

使上述私人的方法,然后产生SomeClass_Accessor,只读元数据,其暴露签名

公共双CalcSomthing(双valueone,双valuetwo = NULL)

代码工作正常,但测试失败

任何解决方案?

+0

我的解决方案不使用可选参数。我搜索了很多意见,并且都推荐使用overloadet方法。 – San 2011-10-18 12:48:15