未验证 提交 3b1a7077 编写于 作者: P Phodal Huang

feat: update assertion list

上级 bd934aff
...@@ -26,10 +26,10 @@ type TestBadSmell struct { ...@@ -26,10 +26,10 @@ type TestBadSmell struct {
func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string]models.JIdentifier) []TestBadSmell { func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string]models.JIdentifier) []TestBadSmell {
var results []TestBadSmell = nil var results []TestBadSmell = nil
var identMethodMap = make(map[string]models.JMethod) var callMethodMap = make(map[string]models.JMethod)
for _, ident := range identifiersMap { for _, clz := range deps {
for _, method := range ident.Methods { for _, method := range clz.Methods {
identMethodMap[ident.Package + "." + ident.ClassName + "." + method.Name] = method callMethodMap[clz.Package+"."+clz.Class+"."+method.Name] = method
} }
} }
...@@ -43,10 +43,12 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string ...@@ -43,10 +43,12 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string
currentMethodCalls := method.MethodCalls currentMethodCalls := method.MethodCalls
for _, methodCall := range currentMethodCalls { for _, methodCall := range currentMethodCalls {
if methodCall.Class == clz.Class { if methodCall.Class == clz.Class {
jMethod := identMethodMap[getMethodCallFullPath(methodCall)] jMethod := callMethodMap[getMethodCallFullPath(methodCall)]
if jMethod.Name != "" {
currentMethodCalls = append(currentMethodCalls, jMethod.MethodCalls...) currentMethodCalls = append(currentMethodCalls, jMethod.MethodCalls...)
} }
} }
}
var testType = "" var testType = ""
for _, annotation := range method.Annotations { for _, annotation := range method.Annotations {
...@@ -64,9 +66,9 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string ...@@ -64,9 +66,9 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string
checkRedundantPrintTest(clz.Path, methodCall, &results, &testType) checkRedundantPrintTest(clz.Path, methodCall, &results, &testType)
checkSleepyTest(clz.Path, methodCall, method, &results, &testType) checkSleepyTest(clz.Path, methodCall, method, &results, &testType)
checkRedundantAssertionTest(clz.Path, methodCall, method, &results, &testType)
methodName := methodCall.MethodName if hasAssertion(methodCall.MethodName) {
if hasAssertion(methodName) {
hasAssert = true hasAssert = true
} }
...@@ -77,13 +79,17 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string ...@@ -77,13 +79,17 @@ func (a TbsApp) AnalysisPath(deps []models.JClassNode, identifiersMap map[string
} }
} }
checkDuplicateAssertTest(clz, &results, methodCallMap, &testType) checkDuplicateAssertTest(clz, &results, methodCallMap, method, &testType)
} }
} }
return results return results
} }
func checkRedundantAssertionTest(path string, call models.JMethodCall, method models.JMethod, result *[]TestBadSmell, testType *string) {
}
func hasAssertion(methodName string) bool { func hasAssertion(methodName string) bool {
methodName = strings.ToLower(methodName) methodName = strings.ToLower(methodName)
assertionList := []string{ assertionList := []string{
...@@ -127,24 +133,28 @@ func checkUnknownTest(clz models.JClassNode, method models.JMethod, results *[]T ...@@ -127,24 +133,28 @@ func checkUnknownTest(clz models.JClassNode, method models.JMethod, results *[]T
*results = append(*results, tbs) *results = append(*results, tbs)
} }
func checkDuplicateAssertTest(clz models.JClassNode, results *[]TestBadSmell, methodCallMap map[string][]models.JMethodCall, testType *string) { func checkDuplicateAssertTest(clz models.JClassNode, results *[]TestBadSmell, methodCallMap map[string][]models.JMethodCall, method models.JMethod, testType *string) {
var isDuplicateAssert = false
for _, methodCall := range methodCallMap { for _, methodCall := range methodCallMap {
if len(methodCall) >= DuplicatedAssertionLimitLength { if len(methodCall) >= DuplicatedAssertionLimitLength {
methodName := methodCall[len(methodCall)-1].MethodName methodName := methodCall[len(methodCall)-1].MethodName
if hasAssertion(methodName) { if hasAssertion(methodName) {
isDuplicateAssert = true
}
}
}
if isDuplicateAssert {
*testType = "DuplicateAssertTest" *testType = "DuplicateAssertTest"
tbs := *&TestBadSmell{ tbs := *&TestBadSmell{
FileName: clz.Path, FileName: clz.Path,
Type: *testType, Type: *testType,
Description: "", Description: "",
Line: methodCall[len(methodCall)-1].StartLine, Line: method.StartLine,
} }
*results = append(*results, tbs) *results = append(*results, tbs)
} }
}
}
} }
func getMethodCallFullPath(methodCall models.JMethodCall) string { func getMethodCallFullPath(methodCall models.JMethodCall) string {
......
package tbs package tbs
import ( import (
"fmt"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/phodal/coca/core/adapter" "github.com/phodal/coca/core/adapter"
"github.com/phodal/coca/core/adapter/call" "github.com/phodal/coca/core/adapter/call"
...@@ -63,7 +62,8 @@ func TestTbsApp_DuplicateAssertTest(t *testing.T) { ...@@ -63,7 +62,8 @@ func TestTbsApp_DuplicateAssertTest(t *testing.T) {
result := buildTbsResult(codePath) result := buildTbsResult(codePath)
g.Expect(result[0].Line).To(Equal(23)) g.Expect(len(result)).To(Equal(1))
g.Expect(result[0].Line).To(Equal(9))
g.Expect(result[0].Type).To(Equal("DuplicateAssertTest")) g.Expect(result[0].Type).To(Equal("DuplicateAssertTest"))
} }
...@@ -79,6 +79,17 @@ func TestTbsApp_UnknownTest(t *testing.T) { ...@@ -79,6 +79,17 @@ func TestTbsApp_UnknownTest(t *testing.T) {
g.Expect(result[1].Type).To(Equal("UnknownTest")) g.Expect(result[1].Type).To(Equal("UnknownTest"))
} }
func TestTbsApp_RedundantAssertionTest(t *testing.T) {
g := NewGomegaWithT(t)
codePath := "../../../_fixtures/tbs/code/RedundantAssertionTest.java"
codePath = filepath.FromSlash(codePath)
result := buildTbsResult(codePath)
g.Expect(len(result)).To(Equal(1))
//g.Expect(result[0].Type).To(Equal("EmptyTest"))
}
func TestTbsApp_CreatorNotUnknownTest(t *testing.T) { func TestTbsApp_CreatorNotUnknownTest(t *testing.T) {
g := NewGomegaWithT(t) g := NewGomegaWithT(t)
codePath := "../../../_fixtures/tbs/regression/CreatorNotUnknownTest.java" codePath := "../../../_fixtures/tbs/regression/CreatorNotUnknownTest.java"
...@@ -96,8 +107,7 @@ func TestTbsApp_CallAssertInClassTests(t *testing.T) { ...@@ -96,8 +107,7 @@ func TestTbsApp_CallAssertInClassTests(t *testing.T) {
result := buildTbsResult(codePath) result := buildTbsResult(codePath)
fmt.Println(result) g.Expect(len(result)).To(Equal(0))
g.Expect(len(result)).To(Equal(1))
} }
func buildTbsResult(codePath string) []TestBadSmell { func buildTbsResult(codePath string) []TestBadSmell {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册