Transcript
Page 1: Tool Development 09 - Localization & Testing

Tool DevelopmentChapter 09: Localization & Testing

Nick Prühs

July 2, 2014

Page 2: Tool Development 09 - Localization & Testing

5 Minute Review Session

• Which wildcards are available at the windows command prompt?

• How do you access parameters in batch files?

• Which redirection operator writes the command output to a file or a device instead of the Command Prompt window?

• How do you access command-line parameters in .NET?

• How do start other programs from your .NET application?

2 / 58

Page 3: Tool Development 09 - Localization & Testing

Assignment Solution #8

DEMO

3 / 58

Page 4: Tool Development 09 - Localization & Testing

Objectives

• To understand how to globalize and localize WPF applications

• To learn how to properly set up automatic testing for your WPF applications

4 / 58

Page 5: Tool Development 09 - Localization & Testing

Globalization & Localization

• When you limit your product's availability to only one language, you limit your potential customer base to a fraction of our world’s 6.5 billion population.

• If you want your applications to reach a global audience, cost-effective localization of your product is one of the best and most economical ways to reach more customers.

5 / 58

Page 6: Tool Development 09 - Localization & Testing

Globalization & Localization

• Globalization is the design and development of applications that perform in multiple locations. For example, globalization supports localized user interfaces and regional data for users in different cultures.

• Localization is the translation of application resources into localized versions for the specific cultures that the application supports.

6 / 58

Page 7: Tool Development 09 - Localization & Testing

WPF UI Design Best Practice

• Write your UI in XAML; avoid creating UI in code.

• Avoid using absolute positions and fixed sizes to lay out content; instead, use relative or automatic sizing.

• Provide extra space in margins because localized text often requires more space.

• Enable TextWrapping on TextBlock to avoid clipping.

• Set the xml:lang attribute.• Changes the behavior of hyphenation, spell checking, number

substitution, complex script shaping, and font fallback.

7 / 58

Page 8: Tool Development 09 - Localization & Testing

Localizing WPF Applications

1. Add a Uid property by running msbuild /t:updateuidProjectName.csproj in a developer command shell.

2. Set <UICulture>en-US</UICulture> in your csproj file.

3. Build the application.

4. Download and build LocBaml from http://msdn.microsoft.com/en-us/library/vstudio/ms771568(v=vs.90).aspx

5. Run LocBaml /parse en-US\ProjectName.resources.dll at the location of the application binary (.exe).

6. Localize the resulting CSV file.

7. Generate new satellite assembly with LocBaml.exe /generate en-US\ProjectName.resources.dll /trans:ProjectName.resources.CSV /out: . /cul:de-DE

8. Copy resulting DLL to corresponding language folder.

8 / 58

Page 9: Tool Development 09 - Localization & Testing

LocBaml CSV Fields

• BAML Name. The name of the BAML resource with respect to the source language satellite assembly.

• Resource Key. The localized resource identifier.

• Category. The value type.

• Readability. Whether the value can be read by a localizer.

• Modifiability. Whether the value can be modified by a localizer.

• Comments. Additional description of the value to help determine how a value is localized.

• Value. The text value to translate to the desired culture.

9 / 58

Page 10: Tool Development 09 - Localization & Testing

Gotcha!

Both the LocBaml tool and yourapplication must target the same

platform and .NET framework!

10 / 78

Page 11: Tool Development 09 - Localization & Testing

Gotcha!

The locale specified for the LocBamltool and the localization folder

must match!

11 / 78

Page 12: Tool Development 09 - Localization & Testing

Localizing the Level Editor

DEMO

12 / 58

Page 13: Tool Development 09 - Localization & Testing

“How do you automate a client-server, distributed, persistent, sharded, asynchronous, realtime, scalable system?”

13 / 58

Page 14: Tool Development 09 - Localization & Testing

“How do you automate a client-server, distributed, persistent, sharded, asynchronous, realtime, scalable system?”

“Very carefully.”

- David Press, CCP Games

14 / 58

Page 15: Tool Development 09 - Localization & Testing

Unit Testing

• Method by which individual units of source code are tested to determine if they are fit for use

• Unit of source code is the smallest testable part of an application (e.g. method)

• Created by programmers during the development process

15 / 58

Page 16: Tool Development 09 - Localization & Testing

Unit Testing

• Ideally, each test case is independent from the others

• Substitutes such as mocks can be used to assist testing a module in isolation (e.g. database, mails)

• Can be implemented as part of automated builds

16 / 58

Page 17: Tool Development 09 - Localization & Testing

Advantages of Unit Testing

Finds problems early• Test Driven Development

Facilitates changes• Can be run before each commit or build

• In combination with source control, can identify the revision (and originator) that broke the code

17 / 58

Page 18: Tool Development 09 - Localization & Testing

Limits of Unit Testing

• Won’t catch every error in the program

• Won’t catch integration errors

• Combinatorial problem• Every boolean decision statement requires at least two

tests

• Can’t test non-deterministic or concurrency problems

18 / 58

Page 19: Tool Development 09 - Localization & Testing

Limits of Unit Testing

• Setting up realistic and useful tests is a challenge

• Test case failures need to be reviewed daily and addressed immediately

• Embedded system software presents a unique challenge• Software is being developed on a different platform than

the one it will eventually run on

19 / 58

Page 20: Tool Development 09 - Localization & Testing

Unit Testing with NUnit

• Unit Testing framework for all .NET languages

• Initially ported from JUnit

• Written entirely in C#

• Stand-alone tools and R# integration

20 / 58

Page 21: Tool Development 09 - Localization & Testing

Setting up NUnit

1. Add new Class Library project to the solution.

2. Add reference to bin/framework/nunit.framework.dll.

21 / 58

Page 22: Tool Development 09 - Localization & Testing

NUnit Test Class Design

• Public

• Default constructor

22 / 58

Page 23: Tool Development 09 - Localization & Testing

NUnit Test Method Design

• [Test] attribute

• Return void

• No parameters

23 / 58

Page 24: Tool Development 09 - Localization & Testing

NUnit Test Example

C#

24 / 58

namespace LevelEditor.Tests{

using LevelEditor.Model;

using NUnit.Framework;

public class MapTest{

[Test]public void TestMapConstructor(){

// Create new map.const int Width = 32;const int Height = 16;

Map map = new Map(Width, Height);

// Check width and height.Assert.AreEqual(Width, map.Width);Assert.AreEqual(Height, map.Height);

}}

}

Page 25: Tool Development 09 - Localization & Testing

NUnit Assertions

• AreEqual, AreNotEqual

• AreSame, AreNotSame

• IsTrue, IsFalse

• Greater, GreaterOrEqual

• Less, LessOrEqual

• IsEmpty, IsNotEmpty

• IsNull, IsNotNull

• Contains

• Fail, Inconclusive

25 / 58

Page 26: Tool Development 09 - Localization & Testing

Expected Exceptions

C#

26 / 58

[Test]

[ExpectedException(typeof(ArgumentOutOfRangeException))]

public void TestNegativeWidth()

{

Map map = new Map(-10, 20);

}

Page 27: Tool Development 09 - Localization & Testing

SetUp and TearDown

C#

27 / 58

public class MapTest{

private const int Height = 16;private const int Width = 32;

private Map map;

[SetUp]public void SetUp(){

this.map = new Map(Width, Height);}

[Test]public void TestTileIndexer(){

const int X = 1;const int Y = 2;

var mapTile = new MapTile(X, Y, "Desert");this.map[X, Y] = mapTile;

Assert.AreEqual(mapTile, this.map[X, Y]);}

}

Page 28: Tool Development 09 - Localization & Testing

Hint

Override Equals in types whose objects you need to compare!

28 / 78

Page 29: Tool Development 09 - Localization & Testing

NUnit Test Tool

29 / 78

Page 30: Tool Development 09 - Localization & Testing

NUnit Console

Console Output

30 / 58

D:\Dev\Repositories\SAE-ToolDevelopment\Vendor\NUnit-2.6.3\bin>nunit-console-x86.exe ..\..\..\Source\LevelEditor.Tests\bin\Debug\LevelEditor.Tests.dll

NUnit-Console version 2.6.3.13283

Copyright (C) 2002-2012 Charlie Poole.

Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.

Copyright (C) 2000-2002 Philip Craig.

All Rights Reserved.

Runtime Environment -

OS Version: Microsoft Windows NT 6.2.9200.0

CLR Version: 2.0.50727.7905 ( Net 3.5 )

ProcessModel: Default DomainUsage: Single

Execution Runtime: net-3.5

...

Tests run: 3, Errors: 0, Failures: 0, Inconclusive: 0, Time: 0.046059608766156 seconds

Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0

Page 31: Tool Development 09 - Localization & Testing

NUnit & Visual Studio

31 / 78

Page 32: Tool Development 09 - Localization & Testing

NUnit & Visual Studio

32 / 78

Page 33: Tool Development 09 - Localization & Testing

Test Driven Development

1. Write an (initially failing) automated test case that defines a desired improvement or new function.

2. Produce the minimum amount of code required to pass that test.

3. Refactor the new code to acceptable standards.

33 / 58

Page 34: Tool Development 09 - Localization & Testing

Advantages of TDD

Client-first development

Taking small steps

All written code is covered by at least one test

Can lead to more modularized code

34 / 58

Page 35: Tool Development 09 - Localization & Testing

Limits of TDD

• Support of the entire team is essential

• Test are typically created by the developer who is writing the code being tested, and may therefore share the same blind spots with the code

• Maintenance overhead

35 / 58

Page 36: Tool Development 09 - Localization & Testing

Assignment #9

Unit Tests

1. Download NUnit from http://nunit.org/index.php?p=download and add it to your project.

2. Write a unit test asserting the construction of maps with correct width and height.

3. Write a unit test asserting the failure of construction of maps with negative width or height.

36 / 58

Page 37: Tool Development 09 - Localization & Testing

References

• MSDN. WPF Globalization and Localization Overview.http://msdn.microsoft.com/en-us/library/ms788718(v=vs.110).aspx, June 2014.

• MSDN. How to: Localize an Application. http://msdn.microsoft.com/en-us/library/ms746621(v=vs.110).aspx, June 2014.

• Wikipedia. Unit testing. http://en.wikipedia.org/wiki/Unit_testing, December 12, 2013.

• Poole. Getting Started with Nunit. http://www.nunit.org/index.php?p=getStarted&r=2.6.3, June 2014.

• Wikipedia. Test-driven development. http://en.wikipedia.org/wiki/Test-driven_development, December 14, 2013.

37 / 58

Page 38: Tool Development 09 - Localization & Testing

Thank you for your attention!

Contact

Mail

[email protected]

Blog

http://www.npruehs.de

Twitter

@npruehs

Github

https://github.com/npruehs

38 / 58


Top Related