我正在为这个返回"void"的方法编写一个单元测试.我希望有一个案例,当没有异常抛出时,测试通过.我如何用C#编写?
Assert.IsTrue(????)
Run Code Online (Sandbox Code Playgroud)
(我猜这是我应该检查的,但是什么进入"???")
我希望我的问题很清楚.
我正在进行单元测试的第一步,并编写了(以及其他)这两种方法:
[TestCase]
public void InsertionSortedSet_AddValues_NoException()
{
var test = new InsertionSortedSet<int>();
test.Add(5);
test.Add(2);
test.Add(7);
test.Add(4);
test.Add(9);
}
[TestCase]
public void InsertionSortedSet_AddValues_CorrectCount()
{
var test = new InsertionSortedSet<int>();
test.Add(5);
test.Add(2);
test.Add(7);
test.Add(4);
test.Add(9);
Assert.IsTrue(test.Count == 5);
}
Run Code Online (Sandbox Code Playgroud)
NoException真的需要这种方法吗?如果要抛出异常,它也将被抛出CorrectCount.
我倾向于将它保留为2个测试用例(可能将重复的代码重构为另一种方法),因为测试应该只测试单个事物,但也许我的解释是错误的.
我有这个功能和测试:
public void SaveForWeb ()
{
UpdateGameState();
try
{
PlayerPrefs.SetFloat(Helper.EXP_KEY, experience);
PlayerPrefs.SetFloat(Helper.SCORE_KEY, score);
// other properties that need to be saved in PlayerPrefs
PlayerPrefs.Save();
}
catch (Exception ex)
{
Debug.Log(ex.Message);
}
}
[Test]
[Category(Helper.TEST_CATEGORY_SAVE_FOR_WEB)]
public void SaveForWebTest ()
{
// arrange
var slgdController = FakeSaveLoadGameDataController();
TestDelegate myDelegate = () => {};
// act
slgdController.SaveForWeb();
// assert
Assert.DoesNotThrow(myDelegate);
}
Run Code Online (Sandbox Code Playgroud)
但我觉得断言和SaveForWeb()函数调用之间没有联系.
注意:SaveForWeb()使用Unity3D API中的PlayerPrefs,如果本地文件超过1 MB,则可能抛出PlayerPrefsException.
如果函数不抛出异常,这是断言的正确方法吗?