diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 772fd1d..339a01e 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -9606,6 +9606,8 @@
 			endfor
 <		Note that a buffer may appear in more than one window.
 
+		Can also be used as a |method|: >
+			GetTabpage()->tabpagebuflist()
 
 tabpagenr([{arg}])					*tabpagenr()*
 		The result is a Number, which is the number of the current
@@ -9628,6 +9630,9 @@
 		    tabpagewinnr(4, '$')    " number of windows in tab page 4
 <		When {tabarg} is invalid zero is returned.
 
+		Can also be used as a |method|: >
+			GetTabpage()->tabpagewinnr()
+<
 							*tagfiles()*
 tagfiles()	Returns a |List| with the file names used to search for tags
 		for the current buffer.  This is the 'tags' option expanded.
@@ -9676,6 +9681,9 @@
 		located by Vim. Refer to |tags-file-format| for the format of
 		the tags file generated by the different ctags tools.
 
+		Can also be used as a |method|: >
+			GetTagpattern()->taglist()
+
 tan({expr})						*tan()*
 		Return the tangent of {expr}, measured in radians, as a |Float|
 		in the range [-inf, inf].
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index e29921a..82fe64e 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -44,6 +44,8 @@
 		let memory allocation fail {repeat} times.  When {repeat} is
 		smaller than one it fails one time.
 
+		Can also be used as a |method|: >
+			GetAllocId()->test_alloc_fail()
 
 test_autochdir()					*test_autochdir()*
 		Set a flag to enable the effect of 'autochdir' before Vim
@@ -55,6 +57,8 @@
 		were typed by the user. This uses a low level input buffer.
 		This function works only when with |+unix| or GUI is running.
 
+		Can also be used as a |method|: >
+			GetText()->test_feedinput()
 
 test_garbagecollect_now()			 *test_garbagecollect_now()*
 		Like garbagecollect(), but executed right away.  This must
@@ -73,6 +77,8 @@
 		{name} are supported:
 			need_fileinfo
 
+		Can also be used as a |method|: >
+			GetName()->test_getvalue()
 
 test_ignore_error({expr})			 *test_ignore_error()*
 		Ignore any error containing {expr}.  A normal message is given
@@ -84,6 +90,8 @@
 		When the {expr} is the string "RESET" then the list of ignored
 		errors is made empty.
 
+		Can also be used as a |method|: >
+			GetErrorText()->test_ignore_error()
 
 test_null_blob()					*test_null_blob()*
 		Return a |Blob| that is null. Only useful for testing.
@@ -124,6 +132,9 @@
 		even though the value is "double".
 		Only to be used for testing!
 
+		Can also be used as a |method|: >
+			GetOptionName()->test_option_not_set()
+
 
 test_override({name}, {val})				*test_override()*
 		Overrides certain parts of Vim's internal processing to be able
@@ -155,12 +166,17 @@
 <		The value of "starting" is saved.  It is restored by: >
 			call test_override('starting', 0)
 
+<		Can also be used as a |method|: >
+			GetOverrideVal()-> test_override('starting')
 
 test_refcount({expr})					*test_refcount()*
 		Return the reference count of {expr}.  When {expr} is of a
 		type that does not have a reference count, returns -1.  Only
 		to be used for testing.
 
+		Can also be used as a |method|: >
+			GetVarname()->test_refcount()
+
 
 test_scrollbar({which}, {value}, {dragging})		*test_scrollbar()*
 		Pretend using scrollbar {which} to move it to position
@@ -179,6 +195,8 @@
 		Only works when the {which} scrollbar actually exists,
 		obviously only when using the GUI.
 
+		Can also be used as a |method|: >
+			GetValue()->test_scrollbar('right', 0)
 
 test_setmouse({row}, {col})				*test_setmouse()*
 		Set the mouse position to be used for the next mouse action.
@@ -197,6 +215,9 @@
 		{expr} must evaluate to a number.  When the value is zero the
 		normal behavior is restored.
 
+		Can also be used as a |method|: >
+			GetTime()->test_settime()
+
 ==============================================================================
 3. Assert functions				*assert-functions-details*
 
