为什么我们将接口实例化为 'ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());'?
why are we Instantiating an interface as 'ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());'?
我在之前的提问中找不到合适的答案。
下面是我的数独求解器的单元测试代码。在这个应用程序中,我有一个界面 'ISudokuStrategy'。只有两个 类 继承了 'ISudokuStrategy':'SimpleMarkUpStrategy' 和 'NakedPairsStrategy'。我的问题是为什么我们将接口实例化为
private readonly ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
为什么不
private readonly SimpleMarkUpStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
这是我的单元测试
[TestClass]
public class SimpleMarkupStrategyTest
{
private readonly ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
[TestMethod]
public void SimpleStrategyShouldSolveAlmostCompletedForTopLeftCell()
{
int[,] sudokuBoard =
{
{0,1,2,3,9,8,4,7,5 },
{5,3,8,4,1,7,6,2,9 },
{4,7,9,5,6,2,3,1,8 },
{9,6,7,2,8,4,1,5,3 },
{3,8,4,6,5,1,7,9,2 },
{2,5,1,7,3,9,8,6,4 },
{8,2,5,1,4,6,9,3,7 },
{1,9,3,8,7,5,2,4,6 },
{7,4,6,9,2,3,5,8,1 }
};
var solvedSudokuBoard = _simpleMarkupStrategy.Solve(sudokuBoard);
Assert.IsTrue(solvedSudokuBoard[0, 0] == 6);
}
}
好吧,是你在写代码,所以……你为什么?我们无法告诉您为什么您的代码看起来像它。
您应该做的是将其设为单元测试的本地变量:
[TestClass]
public class SimpleMarkupStrategyTest
{
[TestMethod]
public void SimpleStrategyShouldSolveAlmostCompletedForTopLeftCell()
{
var simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
int[,] sudokuBoard =
{
{0,1,2,3,9,8,4,7,5 },
{5,3,8,4,1,7,6,2,9 },
{4,7,9,5,6,2,3,1,8 },
{9,6,7,2,8,4,1,5,3 },
{3,8,4,6,5,1,7,9,2 },
{2,5,1,7,3,9,8,6,4 },
{8,2,5,1,4,6,9,3,7 },
{1,9,3,8,7,5,2,4,6 },
{7,4,6,9,2,3,5,8,1 }
};
var solvedSudokuBoard = simpleMarkupStrategy.Solve(sudokuBoard);
Assert.IsTrue(solvedSudokuBoard[0, 0] == 6);
}
}
这样你就不会意外破坏其他单元测试,在它们之间共享一个变量。
正如您所见,作为局部变量,它甚至可以与 var
类型一起使用,并让编译器确定它是什么类型。
它做的一件事是确保您的 class 实现了该接口。但我会假设整个程序无论如何都不会编译,如果你决定删除它。
我在之前的提问中找不到合适的答案。 下面是我的数独求解器的单元测试代码。在这个应用程序中,我有一个界面 'ISudokuStrategy'。只有两个 类 继承了 'ISudokuStrategy':'SimpleMarkUpStrategy' 和 'NakedPairsStrategy'。我的问题是为什么我们将接口实例化为
private readonly ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
为什么不
private readonly SimpleMarkUpStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
这是我的单元测试
[TestClass]
public class SimpleMarkupStrategyTest
{
private readonly ISudokuStrategy _simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
[TestMethod]
public void SimpleStrategyShouldSolveAlmostCompletedForTopLeftCell()
{
int[,] sudokuBoard =
{
{0,1,2,3,9,8,4,7,5 },
{5,3,8,4,1,7,6,2,9 },
{4,7,9,5,6,2,3,1,8 },
{9,6,7,2,8,4,1,5,3 },
{3,8,4,6,5,1,7,9,2 },
{2,5,1,7,3,9,8,6,4 },
{8,2,5,1,4,6,9,3,7 },
{1,9,3,8,7,5,2,4,6 },
{7,4,6,9,2,3,5,8,1 }
};
var solvedSudokuBoard = _simpleMarkupStrategy.Solve(sudokuBoard);
Assert.IsTrue(solvedSudokuBoard[0, 0] == 6);
}
}
好吧,是你在写代码,所以……你为什么?我们无法告诉您为什么您的代码看起来像它。
您应该做的是将其设为单元测试的本地变量:
[TestClass]
public class SimpleMarkupStrategyTest
{
[TestMethod]
public void SimpleStrategyShouldSolveAlmostCompletedForTopLeftCell()
{
var simpleMarkupStrategy = new SimpleMarkUpStrategy(new SudokuMapper());
int[,] sudokuBoard =
{
{0,1,2,3,9,8,4,7,5 },
{5,3,8,4,1,7,6,2,9 },
{4,7,9,5,6,2,3,1,8 },
{9,6,7,2,8,4,1,5,3 },
{3,8,4,6,5,1,7,9,2 },
{2,5,1,7,3,9,8,6,4 },
{8,2,5,1,4,6,9,3,7 },
{1,9,3,8,7,5,2,4,6 },
{7,4,6,9,2,3,5,8,1 }
};
var solvedSudokuBoard = simpleMarkupStrategy.Solve(sudokuBoard);
Assert.IsTrue(solvedSudokuBoard[0, 0] == 6);
}
}
这样你就不会意外破坏其他单元测试,在它们之间共享一个变量。
正如您所见,作为局部变量,它甚至可以与 var
类型一起使用,并让编译器确定它是什么类型。
它做的一件事是确保您的 class 实现了该接口。但我会假设整个程序无论如何都不会编译,如果你决定删除它。