Unit test need to be written even if we are working with on-premise services or with services from cloud. When working with Windows Azure, there are times when we want to write some integration test for Windows Azure tables, blobs or queues.
For these cases we don’t want to hit the Windows Azure from the cloud. This would increase or monthly subscription costs. Usually for this this Windows Storage emulator is used in combination with development storage account.
When we are on a development machine, where we already have Windows Azure Emulator stared we will not have any kind of problems. But will happen on a machine where Windows Azure Emulator is not started. All the tests will fail.
We can write a code in the class initialize step that star the emulator. In the end, the emulator is only a process that can be started from the command line.
The code that we would need to use will look something like this:
And in our unit test we would need something like this:
For these cases we don’t want to hit the Windows Azure from the cloud. This would increase or monthly subscription costs. Usually for this this Windows Storage emulator is used in combination with development storage account.
When we are on a development machine, where we already have Windows Azure Emulator stared we will not have any kind of problems. But will happen on a machine where Windows Azure Emulator is not started. All the tests will fail.
We can write a code in the class initialize step that star the emulator. In the end, the emulator is only a process that can be started from the command line.
The code that we would need to use will look something like this:
The path to the emulator can be different, based on Windows Azure version. This path can be extracted in the configuration file. We are testing if the emulator is started by trying to creating a container. It is very important to set the NoRetry policty.public class CloudStorageEmulatorShepherd { public void Start() { try { CloudStorageAccount storageAccount = CloudStorageAccount.DevelopmentStorageAccount; CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference("test"); container.CreateIfNotExist( new BlobRequestOptions() { RetryPolicy = RetryPolicies.NoRetry(), Timeout = new TimeSpan(0, 0, 0, 1) }); } catch (TimeoutException) { ProcessStartInfo processStartInfo = new ProcessStartInfo() { FileName = Path.Combine( @"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator", "
csrun.exe
"), Arguments =
@"/devstore"
, }; using (Process process = Process.Start(processStartInfo)) { process.WaitForExit(); } } } }
And in our unit test we would need something like this:
In this way, we will be able to run integration test with Windows Azure without any kind of problem.[ClassInitialize()] public static void ClassInit(TestContext context) {
CloudStorageEmulatorShepherd s
hepherd
= new
CloudStorageEmulatorShepherd
();
s
hepherd
.Start(); }
Comments
Post a Comment