11' Copyright (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD, and Contributors. 
22' All rights reserved. Licensed under the BSD 3-Clause License; see License.txt. 
33
4- Imports  Moq 
5- Imports  Xunit 
6- 
4+ Imports  System.Linq.Expressions 
75
6+ Imports  Xunit 
87
98Public  Class  IssueReports 
109
@@ -29,4 +28,51 @@ Public Class IssueReports
2928		End  Interface 
3029	End  Class 
3130
31+ 	Public  Class  Issue1067 
32+ 
33+ 		<Fact> 
34+ 		Public  Sub  Test_NonGeneric() 
35+ 			Dim  userManagerMock  =  New  Mock( Of  IUserManager)() 
36+ 			Setup_NonGeneric(userManagerMock,  42 ) 
37+ 
38+ 			Dim  user  As  New  User() 
39+ 			userManagerMock.Object.Create(user) 
40+ 
41+ 			Assert.Equal( 42 ,  user.Id) 
42+ 		End  Sub 
43+ 
44+ 		<Fact> 
45+ 		Public  Sub  Test_Generic() 
46+ 			Dim  userManagerMock  =  New  Mock( Of  IUserManager)() 
47+ 			Setup_Generic( Of  User)(userManagerMock,  42 ) 
48+ 
49+ 			Dim  user  As  New  User() 
50+ 			userManagerMock.Object.Create(user) 
51+ 
52+ 			Assert.Equal( 42 ,  user.Id) 
53+ 		End  Sub 
54+ 
55+ 		Public  Class  User 
56+ 			Property  Id  As  Integer 
57+ 		End  Class 
58+ 
59+ 		Public  Interface  IUserManager 
60+ 			Sub  Create(User  As  User) 
61+ 		End  Interface 
62+ 
63+ 		Protected  Sub  Setup_NonGeneric(userManagerMock  As  Mock( Of  IUserManager),  expectedId  As  Integer ) 
64+ 			userManagerMock.Setup( Sub (manager)  manager.Create(It.IsAny( Of  User))).Callback( Sub (user)  user.Id  =  expectedId) 
65+ 		End  Sub 
66+ 
67+ 		Protected  Sub  Setup_Generic( Of  TUser  As  User)(userManagerMock  As  Mock( Of  IUserManager),  expectedId  As  Integer ) 
68+ 			userManagerMock.Setup( Sub (manager)  manager.Create(It.IsAny( Of  TUser))).Callback( Sub (user)  user.Id  =  expectedId) 
69+ 			'                                                             ^ 
70+ 			' The use of generics will cause the VB.NET compiler to wrap the `It.IsAny<>` call with two `Convert` nodes. 
71+ 			' The inner conversion will convert to `Object`, and the outer conversion will convert to `User` (i.e. the type that 
72+ 			' `TUser` is constrained to). `MatcherFactory` needs to be able to recognize the `It.IsAny<>` matcher even if it 
73+ 			' is doubly wrapped! 
74+ 		End  Sub 
75+ 
76+ 	End  Class 
77+ 
3278End  Class 
0 commit comments