我们可以将@IBOutlets
和@IBAction
设为私有。
示例:
class MyViewController: UIViewController {
@IBOutlet private weak var myLabel: UILabel!
@IBAction private func nextTapped(sender: UIButton) {
// Do something
}
}
我们无法在课堂外访问这些属性和方法,这是件好事。
但是如何通过私人网点和行动来测试课程呢?有没有办法在XCTestCase中测试私有插座或方法,或者我必须将它们暴露在课堂内部?
出于测试的目的@IBOutlet
s / @IBAction
应该在内部可见?
答案 0 :(得分:4)
无法使用$data = array();
$t = false;
$st = false;
if (($handle = fopen($filename, 'r')) !== FALSE)
{
$header = fgetcsv($handle, 1000, $delimiter);
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
$level = $row[count($row)-1];
if($level=='T') {
$t = $row[0];
$data[$t][$header[1]] = $row[1];
}
elseif($level=='ST'){
$st = $row[0];
$data[$t][$st][$header[1]] = $row[1];
}
else{
$tmp_row = array(
$header[0] => $row[0],
$header[1] => $row[1],
$header[2] => $row[2]
);
$data[$t][$st][] = $tmp_row;
}
}
fclose($handle);
}
print_r($data);
测试private
方法。
这是因为Swift的XCTest
非常私有,编译器使用这些信息来更好地优化代码。
要测试方法,必须为private
或public
,然后您可以使用internal
导入模块。
摘自Should I test private methods or only public ones?:
我没有对私有方法进行单元测试。私有方法是应该为类的用户隐藏的实现细节。测试私有方法会破坏封装。
答案 1 :(得分:0)
私有方法也必须进行测试,但关键是在测试类中没有任何改变来运行测试。
默认情况下,您可以从单元测试中访问IBOutlets,但是如果您将它们设置为私有,则可以始终在测试中创建您的类的新MockSubclass,然后公开私有内容。
在测试期间,只需实例化您的模拟子类并调用一个返回私有插座的函数。
注意!让你的模拟类始终处于测试目标之下。