3

こんにちは、GUI のレイアウト テーマを表すクラスをテストしようとしています。色とサイズのプロパティと、デフォルト値を設定するメソッドがあります。

public class LayoutTheme : ILayoutTheme
{
    public LayoutTheme()
    {
        SetTheme();
    }

    public void SetTheme()
    {
        WorkspaceGap = 4;
        SplitBarWidth = 4;
        ApplicationBack = ColorTranslator.FromHtml("#EFEFF2");
        SplitBarBack = ColorTranslator.FromHtml("#CCCEDB");
        PanelBack = ColorTranslator.FromHtml("#FFFFFF ");
        PanelFore = ColorTranslator.FromHtml("#1E1E1E ");
        // ...
    }

    public int WorkspaceGap { get; set; }
    public int SplitBarWidth{ get; set; }
    public Color ApplicationBack { get; set; }
    public Color SplitBarBack { get; set; }
    public Color PanelBack { get; set; }
    public Color PanelFore { get; set; }
    // ...
}

テストする必要があります: 1. すべてのプロパティが SetTheme メソッドによって設定されているかどうか。2. プロパティの設定に重複がない場合。

最初のテストでは、最初にすべてのプロパティを循環し、異常な値を設定します。その後、SetTheme メソッドを呼び出してもう一度繰り返し、すべてのプロパティが変更されているかどうかを確認します。

[Test]
public void LayoutTheme_IfPropertiesSet()
{
    var theme = new LayoutTheme();
    Type typeTheme = theme.GetType();

    PropertyInfo[] propInfoList = typeTheme.GetProperties();

    int intValue = int.MinValue;
    Color colorValue = Color.Pink;

    // Set unusual value
    foreach (PropertyInfo propInfo in propInfoList)
    {
        if (propInfo.PropertyType == typeof(int))
            propInfo.SetValue(theme, intValue, null);
        else if (propInfo.PropertyType == typeof(Color))
            propInfo.SetValue(theme, colorValue, null);
        else
            Assert.Fail("Property '{0}' of type '{1}' is not tested!", propInfo.Name, propInfo.PropertyType);
    }

    theme.SetTheme();

    // Check if value changed
    foreach (PropertyInfo propInfo in propInfoList)
    {
        if (propInfo.PropertyType == typeof(int))
            Assert.AreNotEqual(propInfo.GetValue(theme, null), intValue, string.Format("Property '{0}' is not set!", propInfo.Name));
        else if (propInfo.PropertyType == typeof(Color))
            Assert.AreNotEqual(propInfo.GetValue(theme, null), colorValue, string.Format("Property '{0}' is not set!", propInfo.Name));
    }
}

実際、テストはうまく機能し、2 つの設定ミスも見つかりましたが、うまく書かれていないと思います。おそらくインターフェイスの Moq でドンして、すべてのプロパティが設定されているかどうかを確認できます。

2 番目のテストについては、その方法がわかりません。おそらく、呼び出しの数をモックしてチェックすることでそれが可能になります。何か助けはありますか?

ありがとうございました!

4

1 に答える 1

0

すべてのプロパティが特定の値に設定されているかどうかをテストするにはEquals()、このクラスを実装し、既知の値を持つ 2 つ目のオブジェクトを作成して、等しいかどうかを確認します。これは、状態の変化などをテストするときにも役立ちます。

明示的な理由がない場合、プロパティが複数回設定されるかどうかはテストしません。

于 2012-09-16T10:46:10.230 に答える