This repository has been archived by the owner on Jan 19, 2022. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Testing Framework for RestTemplate based code (example) [SPRNET…
…REST-20]
- Loading branch information
Showing
8 changed files
with
344 additions
and
0 deletions.
There are no files selected for viewing
28 changes: 28 additions & 0 deletions
28
examples/Spring.TestingQuickStart/Spring.TestingQuickStart.2010-NET40.sln
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
Microsoft Visual Studio Solution File, Format Version 11.00 | ||
# Visual Studio 2010 | ||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.RestBucksClient", "src\Spring.RestBucksClient\Spring.RestBucksClient.2010-NET40.csproj", "{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}" | ||
EndProject | ||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Spring.RestBucksClient.Tests", "test\Spring.RestBucksClient.Tests\Spring.RestBucksClient.Tests.2010-NET40.csproj", "{985A302C-4F1B-4D40-948E-3160C6B39C30}" | ||
EndProject | ||
Global | ||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
Debug|Any CPU = Debug|Any CPU | ||
Release|Any CPU = Release|Any CPU | ||
EndGlobalSection | ||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}.Release|Any CPU.Build.0 = Release|Any CPU | ||
{985A302C-4F1B-4D40-948E-3160C6B39C30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
{985A302C-4F1B-4D40-948E-3160C6B39C30}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
{985A302C-4F1B-4D40-948E-3160C6B39C30}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
{985A302C-4F1B-4D40-948E-3160C6B39C30}.Release|Any CPU.Build.0 = Release|Any CPU | ||
EndGlobalSection | ||
GlobalSection(SolutionProperties) = preSolution | ||
HideSolutionNode = FALSE | ||
EndGlobalSection | ||
GlobalSection(ExtensibilityGlobals) = postSolution | ||
NAntAddinLastFileName = Spring.build | ||
EndGlobalSection | ||
EndGlobal |
21 changes: 21 additions & 0 deletions
21
examples/Spring.TestingQuickStart/src/Spring.RestBucksClient/Api/Order.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
using System.Collections.Generic; | ||
using System.Runtime.Serialization; | ||
|
||
namespace Spring.RestBucksClient.Api | ||
{ | ||
[DataContract(Name="order", Namespace="http://restbucks.com")] | ||
public class Order | ||
{ | ||
[DataMember(Name = "location", Order = 0)] | ||
public string Location { get; set; } | ||
|
||
[DataMember(Name = "cost", EmitDefaultValue = false, Order = 1)] | ||
public decimal Cost { get; set; } | ||
|
||
[DataMember(Name = "items", Order = 2)] | ||
public List<OrderItem> Items { get; set; } | ||
|
||
[DataMember(Name = "status", EmitDefaultValue = false, Order = 3)] | ||
public string Status { get; set; } | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
examples/Spring.TestingQuickStart/src/Spring.RestBucksClient/Api/OrderItem.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
using System.Runtime.Serialization; | ||
|
||
namespace Spring.RestBucksClient.Api | ||
{ | ||
[DataContract(Name = "item", Namespace = "http://restbucks.com")] | ||
public class OrderItem | ||
{ | ||
[DataMember(Name = "name", Order = 0)] | ||
public string Name { get; set; } | ||
|
||
[DataMember(Name = "quantity", Order = 1)] | ||
public int Quantity { get; set; } | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
examples/Spring.TestingQuickStart/src/Spring.RestBucksClient/Api/RestBucksClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
using System; | ||
|
||
using Spring.Http; | ||
using Spring.Http.Converters.Xml; | ||
using Spring.Rest.Client; | ||
|
||
namespace Spring.RestBucksClient.Api | ||
{ | ||
/// <summary> | ||
/// Basic REST Client for the example of the book "REST in practice": http://restinpractice.com/. | ||
/// Uses http://restbuckson.net/ for the server side. | ||
/// </summary> | ||
public class RestBucksClient | ||
{ | ||
private const string BaseUrl = "http://restbuckson.net/"; | ||
|
||
private RestTemplate restTemplate; | ||
|
||
/// <summary> | ||
/// Gets a reference to the REST client backing this API binding and used to perform API calls. | ||
/// </summary> | ||
public RestTemplate RestTemplate | ||
{ | ||
get { return this.restTemplate; } | ||
} | ||
|
||
public RestBucksClient() | ||
{ | ||
// Create and configure RestTemplate | ||
restTemplate = new RestTemplate(BaseUrl); | ||
DataContractHttpMessageConverter xmlConverter = new DataContractHttpMessageConverter(); | ||
xmlConverter.SupportedMediaTypes = new MediaType[]{ new MediaType("application", "vnd.restbucks+xml") }; | ||
restTemplate.MessageConverters.Add(xmlConverter); | ||
} | ||
|
||
|
||
// Methods | ||
|
||
public Uri CreateOrder(Order order) | ||
{ | ||
return restTemplate.PostForLocation("orders", order); | ||
} | ||
|
||
public Order GetOrder(Uri orderUri) | ||
{ | ||
return restTemplate.GetForObject<Order>(orderUri); | ||
} | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
...ing.TestingQuickStart/src/Spring.RestBucksClient/Spring.RestBucksClient.2010-NET40.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<PropertyGroup> | ||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
<ProductVersion>8.0.30703</ProductVersion> | ||
<SchemaVersion>2.0</SchemaVersion> | ||
<ProjectGuid>{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}</ProjectGuid> | ||
<OutputType>Library</OutputType> | ||
<AppDesignerFolder>Properties</AppDesignerFolder> | ||
<RootNamespace>Spring.RestBucksClient</RootNamespace> | ||
<AssemblyName>Spring.RestBucksClient</AssemblyName> | ||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | ||
<FileAlignment>512</FileAlignment> | ||
<TargetFrameworkProfile>Client</TargetFrameworkProfile> | ||
</PropertyGroup> | ||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
<DebugSymbols>true</DebugSymbols> | ||
<DebugType>full</DebugType> | ||
<Optimize>false</Optimize> | ||
<OutputPath>bin\Debug\</OutputPath> | ||
<DefineConstants>DEBUG;TRACE</DefineConstants> | ||
<ErrorReport>prompt</ErrorReport> | ||
<WarningLevel>4</WarningLevel> | ||
</PropertyGroup> | ||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
<DebugType>pdbonly</DebugType> | ||
<Optimize>true</Optimize> | ||
<OutputPath>bin\Release\</OutputPath> | ||
<DefineConstants>TRACE</DefineConstants> | ||
<ErrorReport>prompt</ErrorReport> | ||
<WarningLevel>4</WarningLevel> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Reference Include="Spring.Rest"> | ||
<HintPath>..\..\..\..\bin\net\4.0\Debug\Spring.Rest.dll</HintPath> | ||
</Reference> | ||
<Reference Include="System" /> | ||
<Reference Include="System.Runtime.Serialization" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<Compile Include="Api\OrderItem.cs" /> | ||
<Compile Include="Api\Order.cs" /> | ||
<Compile Include="Api\RestBucksClient.cs" /> | ||
</ItemGroup> | ||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | ||
Other similar extension points exist, see Microsoft.Common.targets. | ||
<Target Name="BeforeBuild"> | ||
</Target> | ||
<Target Name="AfterBuild"> | ||
</Target> | ||
--> | ||
</Project> |
17 changes: 17 additions & 0 deletions
17
examples/Spring.TestingQuickStart/test/Spring.RestBucksClient.Tests/Api/Order.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<order xmlns="http://restbucks.com"> | ||
<links> | ||
<link uri="http://restbuckson.net/order/2818050" rel="http://restbuckson.net/docs/order-get.htm" mediaType="application/vnd.restbucks+xml"/> | ||
<link uri="http://restbuckson.net/order/2818050" rel="http://restbuckson.net/docs/order-update.htm" mediaType="application/vnd.restbucks+xml"/> | ||
<link uri="http://restbuckson.net/order/2818050" rel="http://restbuckson.net/docs/order-cancel.htm" mediaType="application/vnd.restbucks+xml"/> | ||
<link uri="http://restbuckson.net/order/2818050/payment" rel="http://restbuckson.net/docs/order-pay.htm" mediaType="application/vnd.restbucks+xml"/> | ||
</links> | ||
<location>inShop</location> | ||
<cost>7.60000</cost> | ||
<items> | ||
<item> | ||
<name>Latte</name> | ||
<quantity>1</quantity> | ||
</item> | ||
</items> | ||
<status>unpaid</status> | ||
</order> |
95 changes: 95 additions & 0 deletions
95
...es/Spring.TestingQuickStart/test/Spring.RestBucksClient.Tests/Api/RestBucksClientTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
|
||
using NUnit.Framework; // Here we are using NUnit, but any other unit test framework will work as well. | ||
|
||
using Spring.IO; | ||
using Spring.Http; | ||
using Spring.Rest.Client.Testing; | ||
|
||
namespace Spring.RestBucksClient.Api | ||
{ | ||
/// <summary> | ||
/// Unit tests for the RestBucksClient class. | ||
/// </summary> | ||
[TestFixture] | ||
public sealed class RestBucksClientTests | ||
{ | ||
private RestBucksClient restBucksClient; | ||
private MockRestServiceServer mockServer; | ||
private HttpHeaders responseHeaders; | ||
|
||
[SetUp] | ||
public void Setup() | ||
{ | ||
restBucksClient = new RestBucksClient(); | ||
mockServer = MockRestServiceServer.CreateServer(this.restBucksClient.RestTemplate); | ||
|
||
responseHeaders = new HttpHeaders(); | ||
responseHeaders.ContentType = new MediaType("application", "vnd.restbucks+xml"); | ||
} | ||
|
||
[TearDown] | ||
public void TearDown() | ||
{ | ||
this.mockServer.Verify(); | ||
} | ||
|
||
|
||
// Test methods | ||
|
||
[Test] | ||
public void CreateOrder() | ||
{ | ||
responseHeaders.Location = new Uri("http://restbucks.com/order/123456"); | ||
mockServer.ExpectNewRequest() | ||
.AndExpectUri("http://restbuckson.net/orders") | ||
.AndExpectMethod(HttpMethod.POST) | ||
.AndExpectBody("<order xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://restbucks.com\"><location>inShop</location><items><item><name>Latte</name><quantity>1</quantity></item></items></order>") | ||
.AndRespondWith("", responseHeaders); | ||
|
||
Order order = new Order() | ||
{ | ||
Location = "inShop", | ||
Items = new List<OrderItem>() | ||
{ | ||
new OrderItem() | ||
{ | ||
Name = "Latte", | ||
Quantity = 1 | ||
} | ||
} | ||
}; | ||
Uri uri = restBucksClient.CreateOrder(order); | ||
Assert.AreEqual(responseHeaders.Location, uri); | ||
} | ||
|
||
[Test] | ||
public void GetOrder() | ||
{ | ||
Uri orderUri = new Uri("http://restbuckson.net/order/123456"); | ||
mockServer.ExpectNewRequest() | ||
.AndExpectUri(orderUri) | ||
.AndExpectMethod(HttpMethod.GET) | ||
.AndRespondWith(XmlResource("Order"), responseHeaders); | ||
|
||
Order order = restBucksClient.GetOrder(orderUri); | ||
Assert.IsNotNull(order); | ||
Assert.AreEqual("inShop", order.Location); | ||
Assert.AreEqual(7.6, order.Cost); | ||
Assert.AreEqual(1, order.Items.Count); | ||
Assert.AreEqual("Latte", order.Items[0].Name); | ||
Assert.AreEqual(1, order.Items[0].Quantity); | ||
Assert.AreEqual("unpaid", order.Status); | ||
} | ||
|
||
|
||
// Helper methods | ||
|
||
private static IResource XmlResource(string filename) | ||
{ | ||
// Note: Default namespace is 'Spring.RestBucksClient' | ||
return new AssemblyResource("assembly://Spring.RestBucksClient.Tests/Spring.RestBucksClient.Api/" + filename + ".xml"); | ||
} | ||
} | ||
} |
66 changes: 66 additions & 0 deletions
66
...ickStart/test/Spring.RestBucksClient.Tests/Spring.RestBucksClient.Tests.2010-NET40.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
<PropertyGroup> | ||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
<ProductVersion>8.0.30703</ProductVersion> | ||
<SchemaVersion>2.0</SchemaVersion> | ||
<ProjectGuid>{985A302C-4F1B-4D40-948E-3160C6B39C30}</ProjectGuid> | ||
<OutputType>Library</OutputType> | ||
<AppDesignerFolder>Properties</AppDesignerFolder> | ||
<RootNamespace>Spring.RestBucksClient</RootNamespace> | ||
<AssemblyName>Spring.RestBucksClient.Tests</AssemblyName> | ||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | ||
<FileAlignment>512</FileAlignment> | ||
</PropertyGroup> | ||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||
<DebugSymbols>true</DebugSymbols> | ||
<DebugType>full</DebugType> | ||
<Optimize>false</Optimize> | ||
<OutputPath>bin\Debug\</OutputPath> | ||
<DefineConstants>DEBUG;TRACE</DefineConstants> | ||
<ErrorReport>prompt</ErrorReport> | ||
<WarningLevel>4</WarningLevel> | ||
</PropertyGroup> | ||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||
<DebugType>pdbonly</DebugType> | ||
<Optimize>true</Optimize> | ||
<OutputPath>bin\Release\</OutputPath> | ||
<DefineConstants>TRACE</DefineConstants> | ||
<ErrorReport>prompt</ErrorReport> | ||
<WarningLevel>4</WarningLevel> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Reference Include="nunit.framework, Version=2.5.4.10098, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL"> | ||
<SpecificVersion>False</SpecificVersion> | ||
<HintPath>..\..\..\..\lib\net\2.0\nunit.framework.dll</HintPath> | ||
</Reference> | ||
<Reference Include="Spring.Rest"> | ||
<HintPath>..\..\..\..\bin\net\4.0\Debug\Spring.Rest.dll</HintPath> | ||
</Reference> | ||
<Reference Include="Spring.Rest.Testing"> | ||
<HintPath>..\..\..\..\bin\net\4.0\Debug\Spring.Rest.Testing.dll</HintPath> | ||
</Reference> | ||
<Reference Include="System" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<Compile Include="Api\RestBucksClientTests.cs" /> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<ProjectReference Include="..\..\src\Spring.RestBucksClient\Spring.RestBucksClient.2010-NET40.csproj"> | ||
<Project>{CC3E13DE-FF16-4659-A7D8-0BE9F5246A24}</Project> | ||
<Name>Spring.RestBucksClient</Name> | ||
</ProjectReference> | ||
</ItemGroup> | ||
<ItemGroup> | ||
<EmbeddedResource Include="Api\Order.xml" /> | ||
</ItemGroup> | ||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | ||
Other similar extension points exist, see Microsoft.Common.targets. | ||
<Target Name="BeforeBuild"> | ||
</Target> | ||
<Target Name="AfterBuild"> | ||
</Target> | ||
--> | ||
</Project> |