我是UnitTesting的新手,并且有以下代码
public class PowerOf
{
public int CalcPowerOf(int @base, int exponent) {
if (@base == 0) { return 0; }
if (exponent == 0) { return 1; }
return @base * CalcPowerOf(@base, exponent - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
我首先为它编写的单元测试(使用xUnit)就是这个,但是我不太确定它是否是正确的方法,或者我是否应该使用其他模式? 我想知道的是,这是否正确用于将多组数据传递到"单元测试" - 因为我没有在xUnit的文档上看到任何文档或参考示例?
[Fact]
public void PowerOfTest() {
foreach(var td in PowerOfTestData()) {
Assert.Equal(expected, CalcPowerOf(@base, exponent));
}
}
public class TestData {
int Base {get;set;}
int Exponent {get;set;}
int ExpectedResult {get;set;}
}
public List<TestData> PowerOfTestData() {
yield return new TestData { …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个“Singleton”类,但它必须承受线程安全,因为我不仅要访问,还要设置一些东西。lock(object)当我不知道它实际上在做什么以及我是否必须使每个方法线程安全时,感觉有点笨拙?
到目前为止,我有这个非线程安全代码 - 因为在每个线程中都应该访问相同的数据。我将如何最好地使其线程安全并保持单例?
public class AppSession() {
private static AppSession _instance = new AppSession();
public static AppSession Instance { get { return _instance; } }
private AppSession() { }
private string _actionName = "none";
private DateTime? _actionTime = null;
public void ActionExecuted(string action) {
_actionName = action ?? String.Empty;
_actionTime = DateTime.UtcNow;
}
public LastAction {
get { return $"{_action} at {_actionTime?.Value.ToString()}"; }
}
}
Run Code Online (Sandbox Code Playgroud)