c# - TestAccelerometer implementation for Window Phone -
problem
my application use accelerometer data via microsoft.devices.sensors.accelerometer
class
now wanna write unit or codedui tests, reason need have special test implementation of accelerometer
controlling returned data
in theory have 3 options:
- create subclass of
accelerometer
- impossible becauseaccelerometer
sealed
class - by using reflection replace implementation of
accelerometer
@ run-time - isn't best option imho - create subclass of
sensorbase<accelerometerreading>
- option
i have decided go #1
, implement testaccelerometer
child of sensorbase<accelerometerreading>
and here have problem:
`error cs1729 'sensorbase<accelerometerreading>' not contain constructor takes 0 arguments`
error pretty clear have looked in decompiled code (jetbrains dotpeak
tool) , don't found constructors @ all.
questions
how can found proper constructor use in testaccelerometer
implementation?
decompiled code
microsoft.devices.sensors.accelerometer
// type: microsoft.devices.sensors.accelerometer // assembly: microsoft.devices.sensors, version=8.0.0.0, culture=neutral, publickeytoken=24eec0d8c86cda1e // mvid: 81ed89aa-6b11-4b39-bafa-38d59cbb1e3b // assembly location: c:\program files (x86)\reference assemblies\microsoft\framework\windowsphone\v8.0\microsoft.devices.sensors.dll using system; namespace microsoft.devices.sensors { /// <summary> /// provides windows phone applications access device’s accelerometer sensor. /// </summary> public sealed class accelerometer : sensorbase<accelerometerreading> { /// <summary> /// gets or sets whether device on application running supports accelerometer sensor. /// </summary> /// /// <returns> /// true if device on application running supports accelerometer sensor; otherwise, false. /// </returns> public static bool issupported { get; internal set; } /// <summary> /// gets current state of accelerometer. value member of <see cref="t:microsoft.devices.sensors.sensorstate"/> enumeration. /// </summary> /// /// <returns> /// type: <see cref="t:microsoft.devices.sensors.sensorstate"/>. /// </returns> public sensorstate state { get; private set; } /// <summary> /// occurs when new data arrives accelerometer. method deprecated in current release. applications should use <see cref="e:microsoft.devices.sensors.sensorbase`1.currentvaluechanged"/> event of <see cref="t:microsoft.devices.sensors.sensorbase`1"/> class instead. /// </summary> [obsolete("use currentvaluechanged")] public event eventhandler<accelerometerreadingeventargs> readingchanged; static accelerometer(); /// <summary> /// releases managed , unmanaged resources used <see cref="t:microsoft.devices.sensors.accelerometer"/>. /// </summary> public new void dispose(); /// <summary> /// starts data acquisition accelerometer. /// </summary> public new void start(); /// <summary> /// stops data acquisition accelerometer. /// </summary> public new void stop(); } }
microsoft.devices.sensors.sensorbase
// type: microsoft.devices.sensors.sensorbase`1 // assembly: microsoft.devices.sensors, version=8.0.0.0, culture=neutral, publickeytoken=24eec0d8c86cda1e // mvid: 81ed89aa-6b11-4b39-bafa-38d59cbb1e3b // assembly location: c:\program files (x86)\reference assemblies\microsoft\framework\windowsphone\v8.0\microsoft.devices.sensors.dll using system; using system.security; namespace microsoft.devices.sensors { /// <summary> /// base class windows phone sensor classes. /// </summary> /// <typeparam name="tsensorreading">the type of reading returned sensor.</typeparam> public abstract class sensorbase<tsensorreading> : idisposable tsensorreading : isensorreading { /// <summary> /// gets object implements <see cref="t:microsoft.devices.sensors.isensorreading"/> contains current value of sensor. object 1 of following types, depending on sensor being referenced: <see cref="t:microsoft.devices.sensors.accelerometerreading"/>, <see cref="t:microsoft.devices.sensors.compassreading"/>, <see cref="t:microsoft.devices.sensors.gyroscopereading"/>, <see cref="t:microsoft.devices.sensors.motionreading"/>. /// </summary> /// /// <returns> /// object implements <see cref="t:microsoft.devices.sensors.isensorreading"/> contains current value of sensor. /// </returns> public tsensorreading currentvalue { get; } /// <summary> /// gets or sets preferred time between <see cref="e:microsoft.devices.sensors.sensorbase`1.currentvaluechanged"/> events. /// </summary> /// /// <returns> /// type: <see cref="t:system.timespan"/>. preferred time between currentvaluechanged events. /// </returns> public timespan timebetweenupdates { get; set; } /// <summary> /// gets validity of sensor’s data. /// </summary> /// /// <returns> /// type: <see cref="t:system.boolean"/>. true if sensor’s data valid; otherwise, false. /// </returns> public bool isdatavalid { get; } /// <summary> /// occurs when new data arrives sensor. /// </summary> public event eventhandler<sensorreadingeventargs<tsensorreading>> currentvaluechanged; static sensorbase(); internal sensorbase(); /// <summary> /// allows object try free resources , perform other cleanup operations before object reclaimed garbage collection. /// </summary> [securitysafecritical] ~sensorbase(); /// <summary> /// releases managed , unmanaged resources used sensor. /// </summary> [securitysafecritical] public void dispose(); /// <summary> /// starts acquisition of data sensor. /// </summary> public virtual void start(); /// <summary> /// stops acquisition of data sensor. /// </summary> public virtual void stop(); } }
you did find constructor:
internal sensorbase();
this constructor prevents sensorbase
having default public constructor , class cannot subclassed outside assembly.
testing complicated. redesign app , use wrapper/adapter accelerometer
puropse of testing or check if there's possibility of mocking sealed class on windows phone.
Comments
Post a Comment