使用TestCaseSource
和自定义派生属性属性时最初遇到的问题。这是一个提炼的例子:
[TestFixture]
public class SomeTestFixture
{
[Test, Property("SomeProperty", "foo")]
public void RegularTest()
{
}
[Test, Property("SomeProperty", "foo"), TestCase(0)]
public void ParametrizedTest(int x)
{
}
[TearDown]
public void TearDown()
{
var properties = TestContext.CurrentContext.Test.Properties;
}
}
properties
将有" SomeProperty":" foo"在RegularTest之后拆除时,但在ParametrizedTest之后它们将是空的。为什么会这样,除了使用反射之外,我该如何处理呢?
答案 0 :(得分:3)
NUnit的一个功能是,在参数化测试中设置的属性适用于包含各个测试用例的套件。因此,您不应该以这种方式应用属性,除非您希望它们是套件的属性,而不是测试用例。
当然,这可能是一个设计缺陷。至少,这会让用户感到困惑。
如果您使用lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000 , 0, (LocationListener) this);
//get Location
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
la = String.valueOf(location.getLatitude());
searchla.setText("Latitude: "+ la);
lo = String.valueOf(location.getLongitude());
searchlo.setText("Longitude: "+lo);
指定测试用例,则无法添加新属性,尽管您可以指定一些众所周知的属性,例如description。解决方法是使用TestCaseAttribute
指定案例,并为每个案例提供TestCaseSourceAttribute
的单个实例。 TestCaseData
类允许您为每个案例设置属性。
不可否认,这不是很方便,但它是一种解决方法。