Top Banner
Tool Development Chapter 09: Localization & Testing Nick Prühs July 2, 2014
38

Tool Development 09 - Localization & Testing

May 14, 2015

Download

Technology

Nick Prühs

Chapter 09 of the lecture Tool Development taught at SAE Institute Hamburg.

Introduction to globalization and localization of WPF applications, as well as unit testing with NUnit.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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