我有一个类保持复杂的科学计算。它被设定为只允许用户创建一个恰当实例的情况。正确地测试的代码,但是,要求设置国家内部的变量直接,因为参考文件,供这些数据在他们的测试案例。做的不当,但是,它可能失效状态。

所以我必须有能力成员的功能,设置内部的变量的单元的测试程序。但是我想 强烈劝阻 普通用户来自这个叫功能。(是的,一个确定的用户可以放弃任何东西...但我不想 做广告 这有一种方法可以做的东西 错误的.)

这将是很高兴能够告诉智能感知,以不显示的功能,例如。

最好的解决方案我在的时刻是,只是名称的功能是这样的:DangerousSet().

还有什么其他的选择我有吗?

后续行动

我找到大卫B的答案大多有用到我的情况。谢谢!
木法沙的建议,以使用反映很好,但是难以执行(对我)。
克里斯建议使用的装饰是很好的,但没有成功。
BFree的建议XML也是良好的,并且已经在使用,但并没有真正解决问题。

最后,BillTheLizard的建议,该问题是在来源文件不是东西,我可以控制的。国际专家发布高度技术性书籍和期刊文章用于利用由他们的社区。事实上,他们不处理我的特定需要的是一个活生生的事实。那里根本没有可替代的文件。

有帮助吗?

解决方案

假设你想要测试这一目的通过操纵它的领域。

public class ComplexCalculation
{
    protected int favoriteNumber;
    public int FavoriteNumber
    {
        get { return favoriteNumber; }
    }
}

把这个对象你的测试会/空间:

public class ComplexCalculationTest : ComplexCalculation
{
    public void SetFavoriteNumber(int newFavoriteNumber)
    {
        this.favoriteNumber = newFavoriteNumber;
    }
}

写你的测试:

    public void Test()
    {
        ComplexCalculationTest myTestObject = new ComplexCalculationTest();
        myTestObject.SetFavoriteNumber(3);
        ComplexCalculation myObject = myTestObject;

        if (myObject.FavoriteNumber == 3)
            Console.WriteLine("Win!");

    }

PS:我知道你说 内部, 但我不认为你意味着 内部.

其他提示

你可以使用 InternalsVisibleToAttribute 标记内部成员作为看到你的测试件。它看来光芒的时候用,在这方面,虽然它不是很"朋友"。

  1. 标志着你 DangerousSet 功能 internal 而不是的 public.

  2. 在性\程序集信息.cs的项目含有 DangerousSet:

    [assembly:InternalsVisibleTo("YourTestAssembly")]

如果你有两个组件测试无论出于何种原因,该法是:

[assembly:InternalsVisibleTo("TestAssembly1"), 
    InternalsVisibleTo("TestAssembly2")]

装饰您的方法与这种属性:

[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]

这将隐藏它从智能感知。

编辑:

但显然,这具有相当重要的警告:"在视觉C# EditorBrowsableAttribute 不抑制的成员从一个类相同的组件"。 通过MSDN.

它听起来像是你真正的问题是你的参考文件。你不应该试验情况下是不可能遇到在适当的使用你的类。如果用户不应该被允许以改变国家的这些变量,那么也不应你的测试。

你也可以使用反映。谷歌搜索了 单元测试私有方法的使用反射.

可以测试码包括一小类的计算课吗?如果是这样,你可以标记的功能 protected 而唯一继承者将能够使用它。我敢肯定,这也需要它的"智能感知",但是我可能是错误的。

我做了什么在过去是我放的XML意见通过的方法和使用的部分写在大大胆的字母。不要用这种方法或什么的。这样,如果有人试图使用它,智能感知会给他们一个漂亮的警告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top