diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt
index fff7f49..a084bc3 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/AddInDefaultArgsTest.kt
@@ -17,6 +17,8 @@
 package androidx.navigation
 
 import android.os.Bundle
+import androidx.navigation.test.intArgument
+import androidx.navigation.test.stringArgument
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
@@ -24,18 +26,9 @@
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
 
-private val stringArgument = "stringArg" to NavArgument.Builder()
-    .setType(NavType.StringType)
-    .setIsNullable(true)
-    .build()
-private val stringArgumentWithDefault = "stringArg" to NavArgument.Builder()
-    .setType(NavType.StringType)
-    .setDefaultValue("aaa")
-    .build()
-private val intArgument = "intArg" to NavArgument.Builder()
-    .setType(NavType.IntType)
-    .setDefaultValue(123)
-    .build()
+private val stringArgumentWithoutDefault = "stringArg" to stringArgument(true)
+private val stringArgumentWithDefault = "stringArg" to stringArgument("aaa")
+private val intArgumentWithDefault = "intArg" to intArgument(123)
 
 @SmallTest
 @RunWith(Parameterized::class)
@@ -51,11 +44,11 @@
                 // Test with an empty set of arguments
                 mapOf(),
                 // Test with an argument with no default value
-                mapOf(stringArgument),
+                mapOf(stringArgumentWithoutDefault),
                 // Test with arguments where only some have default values
-                mapOf(stringArgument, intArgument),
+                mapOf(stringArgumentWithoutDefault, intArgumentWithDefault),
                 // Test with arguments that have default values
-                mapOf(stringArgumentWithDefault, intArgument)
+                mapOf(stringArgumentWithDefault, intArgumentWithDefault)
             ).forEach { arguments: Map<String, NavArgument> ->
                 // Run with a null Bundle
                 add(arrayOf(arguments, Bundle.EMPTY))
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
index 1c3302e..b26ce1c 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDeepLinkTest.kt
@@ -17,6 +17,9 @@
 package androidx.navigation
 
 import android.net.Uri
+import androidx.navigation.test.intArgument
+import androidx.navigation.test.nullableStringArgument
+import androidx.navigation.test.stringArgument
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
@@ -110,7 +113,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -128,7 +131,7 @@
         val id = "invalid"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{id}", id)),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should be null")
             .that(matchArgs)
@@ -143,7 +146,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -161,7 +164,7 @@
         val id = "invalid"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{id}", id)),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should be null")
             .that(matchArgs)
@@ -178,12 +181,8 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument
                 .replace("{id}", id.toString()).replace("{myarg}", myarg)),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build(),
-                "myarg" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .build())
+            mapOf("id" to intArgument(),
+                "myarg" to stringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -204,10 +203,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -224,10 +220,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("myarg" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("myarg" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -246,10 +239,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -267,10 +257,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument),
-            mapOf("myarg" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("myarg" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -289,13 +276,8 @@
         val optional = "test"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?id={id}".replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build(),
-                "optional" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setDefaultValue(optional)
-                    .build())
+            mapOf("id" to intArgument(),
+                "optional" to stringArgument(optional))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -318,13 +300,8 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?optional={optional}&id={id}"
                 .replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build(),
-                "optional" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setDefaultValue(optional)
-                    .build())
+            mapOf("id" to intArgument(),
+                "optional" to stringArgument(optional))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -345,13 +322,8 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?id={id}".replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build(),
-                "optional" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setIsNullable(true)
-                    .build())
+            mapOf("id" to intArgument(),
+                "optional" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -374,13 +346,8 @@
             deepLink.getMatchingArguments(
                 Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?id={id}&invalid={invalid}"
                     .replace("{id}", id.toString())),
-                mapOf("id" to NavArgument.Builder()
-                    .setType(NavType.IntType)
-                    .build(),
-                    "invalid" to NavArgument.Builder()
-                        .setType(NavType.StringType)
-                        .setIsNullable(true)
-                        .build()))
+                mapOf("id" to intArgument(),
+                    "invalid" to nullableStringArgument()))
             fail(
                 "Adding parameter that does not exists in the NavDeepLink should throw " +
                         "IllegalArgumentException"
@@ -403,9 +370,7 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?string={id}"
                 .replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -422,10 +387,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("myarg" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("myarg" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -443,10 +405,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -464,7 +423,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -481,10 +440,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("myarg" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("myarg" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -502,10 +458,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -524,8 +477,8 @@
         val last = "Doe"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{first}", first).replace("{last}", last)),
-            mapOf("first" to NavArgument.Builder().setType(NavType.StringType).build(),
-                "last" to NavArgument.Builder().setType(NavType.StringType).build())
+            mapOf("first" to stringArgument(),
+                "last" to stringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -547,14 +500,8 @@
         val last = "Doe"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("first" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setDefaultValue(first)
-                .build(),
-                "last" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setDefaultValue(last)
-                    .build())
+            mapOf("first" to stringArgument(first),
+                "last" to stringArgument(last))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -576,13 +523,8 @@
         val last = "Doe"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?name=Jane_"),
-            mapOf("first" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .build(),
-                "last" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setDefaultValue(last)
-                    .build())
+            mapOf("first" to stringArgument(),
+                "last" to stringArgument(last))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -602,14 +544,8 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("first" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build(),
-                "last" to NavArgument.Builder()
-                    .setType(NavType.StringType)
-                    .setIsNullable(true)
-                    .build())
+            mapOf("first" to nullableStringArgument(),
+                "last" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -631,9 +567,7 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?productId=wildCardMatch-{id}"
                 .replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -651,10 +585,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -671,10 +602,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?productId=wildCardMatch-{myarg}"),
-            mapOf("myarg" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("myarg" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -693,10 +621,7 @@
         val id = 2
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?productId=.*-"),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .setDefaultValue(id)
-                .build())
+            mapOf("id" to intArgument(id))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -715,9 +640,7 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?productId=A*B{id}"
                 .replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -736,9 +659,7 @@
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?productId={id}A*B"
                 .replace("{id}", id.toString())),
-            mapOf("id" to NavArgument.Builder()
-                .setType(NavType.IntType)
-                .build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -756,9 +677,7 @@
         val path = "directions"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?path=go/to/{path}".replace("{path}", path)),
-            mapOf("path" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .build())
+            mapOf("path" to stringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -776,10 +695,7 @@
         val path = "directions"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("path" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setDefaultValue(path)
-                .build())
+            mapOf("path" to stringArgument(path))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -796,10 +712,7 @@
 
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users"),
-            mapOf("path" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setIsNullable(true)
-                .build())
+            mapOf("path" to nullableStringArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -818,10 +731,7 @@
         val path = "directions"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse("$DEEP_LINK_EXACT_HTTPS/users?path=go/to/"),
-            mapOf("path" to NavArgument.Builder()
-                .setType(NavType.StringType)
-                .setDefaultValue(path)
-                .build())
+            mapOf("path" to stringArgument(path))
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -840,7 +750,7 @@
         val name = "John Doe"
         val matchArgs = deepLink.getMatchingArguments(
             Uri.parse(deepLinkArgument.replace("{name}", Uri.encode(name))),
-            mapOf("name" to NavArgument.Builder().setType(NavType.StringType).build())
+            mapOf("name" to stringArgument())
         )
 
         assertWithMessage("Args should not be null")
@@ -862,8 +772,8 @@
             Uri.parse(deepLinkArgument
                 .replace("{id}", id.toString())
                 .replace("{postId}", postId.toString())),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build(),
-                "postId" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument(),
+                "postId" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -913,7 +823,7 @@
             Uri.parse(deepLinkMultiple
                 .replace(".*", "test")
                 .replace("{postId}", postId.toString())),
-            mapOf("postId" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("postId" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
@@ -933,7 +843,7 @@
             Uri.parse(deepLinkMultiple
                 .replace("{id}", id.toString())
                 .replace(".*", "test")),
-            mapOf("id" to NavArgument.Builder().setType(NavType.IntType).build())
+            mapOf("id" to intArgument())
         )
         assertWithMessage("Args should not be null")
             .that(matchArgs)
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
index 0aab743..41bbc79 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavDestinationAndroidTest.kt
@@ -18,6 +18,8 @@
 
 import android.net.Uri
 import android.os.Bundle
+import androidx.navigation.test.intArgument
+import androidx.navigation.test.stringArgument
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
@@ -28,10 +30,7 @@
     @Test
     fun matchDeepLink() {
         val destination = NoOpNavigator().createDestination()
-        val idArgument = NavArgument.Builder()
-            .setType(NavType.IntType)
-            .build()
-        destination.addArgument("id", idArgument)
+        destination.addArgument("id", intArgument())
         destination.addDeepLink("www.example.com/users/{id}")
 
         val match = destination.matchDeepLink(
@@ -52,10 +51,7 @@
 
         destination.addDeepLink("www.example.com/users/index.html")
 
-        val idArgument = NavArgument.Builder()
-            .setType(NavType.StringType)
-            .build()
-        destination.addArgument("id", idArgument)
+        destination.addArgument("id", stringArgument())
         destination.addDeepLink("www.example.com/users/{name}")
 
         val match = destination.matchDeepLink(
@@ -89,16 +85,10 @@
     fun matchDeepLinkBestMatch() {
         val destination = NoOpNavigator().createDestination()
 
-        val idArgument = NavArgument.Builder()
-            .setType(NavType.IntType)
-            .build()
-        destination.addArgument("id", idArgument)
+        destination.addArgument("id", intArgument())
         destination.addDeepLink("www.example.com/users/{id}")
 
-        val postIdArgument = NavArgument.Builder()
-            .setType(NavType.IntType)
-            .build()
-        destination.addArgument("postId", postIdArgument)
+        destination.addArgument("postId", intArgument())
         destination.addDeepLink("www.example.com/users/{id}/posts/{postId}")
 
         val match = destination.matchDeepLink(
@@ -131,10 +121,7 @@
     @Test
     fun testIsValidDeepLinkValidLinkPattern() {
         val destination = NoOpNavigator().createDestination()
-        val stringArgument = NavArgument.Builder()
-            .setType(NavType.StringType)
-            .build()
-        destination.addArgument("testString", stringArgument)
+        destination.addArgument("testString", stringArgument())
         destination.addDeepLink("android-app://androidx.navigation.test/{testString}")
         val deepLink = Uri.parse("android-app://androidx.navigation.test/test")
         destination.addDeepLink(deepLink.toString())
@@ -156,16 +143,8 @@
     @Test
     fun addInDefaultArgs() {
         val destination = NoOpNavigator().createDestination()
-        val stringArgument = NavArgument.Builder()
-            .setType(NavType.StringType)
-            .setDefaultValue("aaa")
-            .build()
-        val intArgument = NavArgument.Builder()
-            .setType(NavType.IntType)
-            .setDefaultValue(123)
-            .build()
-        destination.addArgument("stringArg", stringArgument)
-        destination.addArgument("intArg", intArgument)
+        destination.addArgument("stringArg", stringArgument("aaa"))
+        destination.addArgument("intArg", intArgument(123))
 
         val bundle = destination.addInDefaultArgs(Bundle().apply {
             putString("stringArg", "bbb")
@@ -177,16 +156,8 @@
     @Test(expected = IllegalArgumentException::class)
     fun addInDefaultArgsWrong() {
         val destination = NoOpNavigator().createDestination()
-        val stringArgument = NavArgument.Builder()
-            .setType(NavType.StringType)
-            .setDefaultValue("aaa")
-            .build()
-        val intArgument = NavArgument.Builder()
-            .setType(NavType.IntType)
-            .setDefaultValue(123)
-            .build()
-        destination.addArgument("stringArg", stringArgument)
-        destination.addArgument("intArg", intArgument)
+        destination.addArgument("stringArg", stringArgument("aaa"))
+        destination.addArgument("intArg", intArgument(123))
 
         destination.addInDefaultArgs(Bundle().apply {
             putInt("stringArg", 123)
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/test/NavArgument.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/test/NavArgument.kt
new file mode 100644
index 0000000..1446431
--- /dev/null
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/test/NavArgument.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.navigation.test
+
+import androidx.navigation.NavArgument
+import androidx.navigation.NavType.IntType
+import androidx.navigation.NavType.StringType
+
+// region IntType
+fun intArgument() = NavArgument.Builder().setType(IntType).build()
+
+fun intArgument(
+    defaultValue: Int
+) = NavArgument.Builder().setType(IntType)
+    .setDefaultValue(defaultValue)
+    .build()
+// endregion
+
+// region StringType
+fun stringArgument(
+    isNullable: Boolean = false
+) = NavArgument.Builder().setType(StringType)
+    .setIsNullable(isNullable)
+    .build()
+
+fun stringArgument(
+    defaultValue: String
+) = NavArgument.Builder().setType(StringType)
+    .setDefaultValue(defaultValue)
+    .build()
+
+fun nullableStringArgument() = NavArgument.Builder().setType(StringType)
+    .setIsNullable(true)
+    .build()
+// endregion
