1
1
using Algorithms . RecommenderSystem ;
2
+ using Moq ;
2
3
using NUnit . Framework ;
3
4
using System . Collections . Generic ;
4
5
@@ -7,13 +8,15 @@ namespace Algorithms.Tests.RecommenderSystem
7
8
[ TestFixture ]
8
9
public class CollaborativeFilteringTests
9
10
{
10
- private CollaborativeFiltering recommender = new ( ) ;
11
+ private Mock < ISimilarityCalculator > ? mockSimilarityCalculator ;
12
+ private CollaborativeFiltering ? recommender ;
11
13
private Dictionary < string , Dictionary < string , double > > testRatings = null ! ;
12
14
13
15
[ SetUp ]
14
16
public void Setup ( )
15
17
{
16
- recommender = new CollaborativeFiltering ( ) ;
18
+ mockSimilarityCalculator = new Mock < ISimilarityCalculator > ( ) ;
19
+ recommender = new CollaborativeFiltering ( mockSimilarityCalculator . Object ) ;
17
20
18
21
testRatings = new Dictionary < string , Dictionary < string , double > >
19
22
{
@@ -49,7 +52,7 @@ public void CalculateSimilarity_WithValidInputs_ReturnsExpectedResults(
49
52
var user1Ratings = new Dictionary < string , double > { [ commonItem ] = rating1 } ;
50
53
var user2Ratings = new Dictionary < string , double > { [ commonItem ] = rating2 } ;
51
54
52
- var similarity = recommender . CalculateSimilarity ( user1Ratings , user2Ratings ) ;
55
+ var similarity = recommender ? . CalculateSimilarity ( user1Ratings , user2Ratings ) ;
53
56
54
57
Assert . That ( similarity , Is . InRange ( - 1.0 , 1.0 ) ) ;
55
58
}
@@ -60,17 +63,33 @@ public void CalculateSimilarity_WithNoCommonItems_ReturnsZero()
60
63
var user1Ratings = new Dictionary < string , double > { [ "item1" ] = 5.0 } ;
61
64
var user2Ratings = new Dictionary < string , double > { [ "item2" ] = 4.0 } ;
62
65
63
- var similarity = recommender . CalculateSimilarity ( user1Ratings , user2Ratings ) ;
66
+ var similarity = recommender ? . CalculateSimilarity ( user1Ratings , user2Ratings ) ;
64
67
65
68
Assert . That ( similarity , Is . EqualTo ( 0 ) ) ;
66
69
}
67
70
68
71
[ Test ]
69
72
public void PredictRating_WithNonexistentItem_ReturnsZero ( )
70
73
{
71
- var predictedRating = recommender . PredictRating ( "nonexistentItem" , "user1" , testRatings ) ;
74
+ var predictedRating = recommender ? . PredictRating ( "nonexistentItem" , "user1" , testRatings ) ;
72
75
73
76
Assert . That ( predictedRating , Is . EqualTo ( 0 ) ) ;
74
77
}
78
+
79
+ [ Test ]
80
+ public void PredictRating_WithOtherUserHavingRatedTargetItem_ShouldCalculateSimilarityAndWeightedSum ( )
81
+ {
82
+ var targetItem = "item1" ;
83
+ var targetUser = "user1" ;
84
+
85
+ mockSimilarityCalculator ?
86
+ . Setup ( s => s . CalculateSimilarity ( It . IsAny < Dictionary < string , double > > ( ) , It . IsAny < Dictionary < string , double > > ( ) ) )
87
+ . Returns ( 0.8 ) ;
88
+
89
+ var predictedRating = recommender ? . PredictRating ( targetItem , targetUser , testRatings ) ;
90
+
91
+ Assert . That ( predictedRating , Is . Not . EqualTo ( 0.0d ) ) ;
92
+ Assert . That ( predictedRating , Is . EqualTo ( 3.5d ) . Within ( 0.01 ) ) ;
93
+ }
75
94
}
76
95
}
0 commit comments