こんにちは、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 番目のテストについては、その方法がわかりません。おそらく、呼び出しの数をモックしてチェックすることでそれが可能になります。何か助けはありますか?
ありがとうございました!